黑魂 左右手攻击动作分离

发布时间 2023-07-18 20:56:52作者: dontpanic1703

 利用状态机里的 布尔值R0L1,判断 左手攻击信号为True,右手攻击信号为False 。

 

 

 

 下面的三个动作只需要消勾即可,保留镜像动作,然后把下方三个动作拉箭头到Exit

接下来要将左手持盾的动作修改,原来防御状态机无论左手拿什么一直是持盾状态,要修改变成拿武器时候不会做持盾状态

在 ActorController 34行处新建 private bool leftIsShield = true;作为测试左手防御和攻击的值。

在KeyboardInput里,新建KeyF和G作为测试防御和攻击的按键。配置好相关代码:

public string keyF;
public string keyG;

public MyButton KeyF = new MyButton();
public MyButton KeyG = new MyButton();

KeyF.Tick(Input.GetKey(keyF));
KeyG.Tick(Input.GetKey(keyG));

在IUserInput里 新建四个攻击防御的布尔值:

public bool la;  左手攻击
public bool ld; 左手防御
public bool ra;  右手攻击
public bool rd;  有手防御

注释掉attack布尔值。

 

在ActorController 里, 把31行private float lerpTarget;注销

在下方新建  public bool leftIsShield = true; 左手防御判断

把76行的anim.SetBool("defense", pi.defense);注销

把89行的pi.attack,改成pi.la || pi.ra,下面判断条件修改成:

if (pi.ra)
{
  anim.SetBool("R0L1", false);
  anim.SetTrigger("attack");
}
else if (pi.la&&!leftIsShield)
{
  anim.SetBool("R0L1", true);
  anim.SetTrigger("attack");
}

在下方新建一个持盾判断条件: 104行


if (leftIsShield)
{
  if (CheckState("ground"))
  {
    anim.SetBool("defense", pi.defense);
    anim.SetLayerWeight(anim.GetLayerIndex("defense"), 1);
  }
  else
  {
    anim.SetBool("defense", false);
  }

}
else
{
anim.SetLayerWeight(anim.GetLayerIndex("defense"), 0);
}

 打开LeftArmAnimFix增加 

private ActorController ac;

在Awake增加

ac = GetComponentInParent<ActorController>();