乐趣区

关于unity:黑魂复刻游戏的玩家控制器后跳及动画控制的重新设计Unity随手记

明天实现的内容:
动画管制的从新设计
咱们将彻底勾销跳跃信号,改为应用与速度相干的 forward 参数来判断以后应该转换到哪个动画。


当初 jump 曾经不再须要,能够删除了,也就不须要在代码中触发了,同时也就不必 Clear Signal 了。

后跳动画的退出
在黑魂网络游戏中,在原地站住不动时按下翻滚键,玩家会做出后跳的动作。咱们退出这个新的动作。当 forward 小于 0.1 时,按下 roll 键会进行后跳。

当初,ground 的转换优先级也要调整一下了,首先应该还是 fall,而后因为咱们是判断 forward 小于某个值,所以其次是 jab,再其次是 roll,最初才是 jump。

后跳冲量
和翻滚一样,增加一个 OnJabEnter,通过 FSMOnEnter 脚本来调用,OnJabEnter 要应用两个参数,一个示意后跳的间隔,一个示意后跳产生的高度。其实要不要产生高度取决于动画看着行不行。

    // 进入动画节点 jab 时执行的办法 通过 PlayerController 动画机中的 jab 节点上挂载的 FSMOnEnter 调用
    public void OnJabEnter()
    {
        // 敞开输出并且锁定立体挪动
        DisableInput_LockPlanar();
        // 使用后跳冲量
        m_planarVec = -model.transform.forward * jabVelocity;
        // 使用跳跃冲量
        m_jumpThrustVec.y = jabHeight;
    }

以上办法是我本人的,上面是老师的方法,说白了就是应用 StateMachineBehaviour 脚本上的 OnStateUpdate 来更新地位。

public class FSMOnUpdate : StateMachineBehaviour
{public string[] onUpateMessages;

    // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
    override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {foreach (var msg in onUpateMessages)
        {animator.SendMessageUpwards(msg);
        }
    }

}

当然,OnStateUpdate 其实仍旧只是发送音讯,理论的地位更新还是要交给 PlayerController 中的新办法 OnJabUpdate。

    // 进入动画节点 jab 时执行的办法 通过 PlayerController 动画机中的 jab 节点上挂载的 FSMOnUpdate 调用
    public void OnJabUpdate()
    {m_jumpThrustVec = -model.transform.forward * jabThrust;}

为了使后跳的位移显得更天然,咱们将应用曲线来管制每次的位移量。

为 jab 动画增加曲线,调整好曲线的款式,同时增加新的 float 型动画参数 jabVelocity,肯定和曲线同名。

这样做了当前,参数 jabVelocity 就齐全受曲线的管制了。咱们要做的就是用 jabVelocity 去设置 jabThrust。

    m_thrustVec = model.transform.forward * m_anim.GetFloat("jabVelocity");
退出移动版