黑魂复刻 attack子状态

dontpanic1703 / 2023-07-17 / 原文

 在Animator基础动态层鼠标右键新建 State Machine  ,将这个子状态层更名为attack,把原来attack状态层的动画复制进去,删除原来的attack层

把三个攻击动画连到Exit上。idle动画删除

然后将这三个攻击动画选中修改 Animator State ,将Tag统一修改为attack

 在脚本代码ActorController里,将134行代码

private bool CheckState(string stateName,string layerName="Base Layer")
{
int layerIndex = anim.GetLayerIndex(layerName);
bool result = anim.GetCurrentAnimatorStateInfo(layerIndex).IsName(stateName);
return result;
}

复制一份,修改后用来获取动画中的标签

private bool CheckStateTag(string tagName, string layerName = "Base Layer")
{
int layerIndex = anim.GetLayerIndex(layerName);
bool result = anim.GetCurrentAnimatorStateInfo(layerIndex).IsTag(tagName);
return result;
}

88行控制攻击激活的判断代码

if (pi.attack&&CheckState("ground")&&canAttack)

改成:

 if (pi.attack&&(CheckState("ground")||CheckStateTag("attack"))&&canAttack)

 

 250行if (CheckState("attack1hC","attack")) ,attack参数删除

218行,225-227行,235行,241-243行代码注释掉 ,把lerpTarget和anim.SetLayerWeight功能消掉

把OnAttackIdleEnter和OnAttackIdleUpdate这两个函数删除

 主要防止按键累积攻击