黑魂Unity复刻--傅老师Unity教程学习总结(二)之动画机Animator

素材请见第一章
创建一个空的动画机Animator,添加一个混合树(Blend Tree)取名为ground,意思为将所有地面状态都揉进混合树里
混合树及Animator如图:
黑魂Unity复刻--傅老师Unity教程学习总结(二)之动画机Animator_第1张图片
黑魂Unity复刻--傅老师Unity教程学习总结(二)之动画机Animator_第2张图片
给PlayerHandle挂在另一个script 名为Actor Controller ,来控制胶囊体里具体模型的运动
基本变量:

public GameObject model;
    public PlayerInput pi;
    public float walkSpeed = 1.4f;//调速
    public float runMultiplier = 2.0f;
    public float jumpVelocity = 5.0f;

    [SerializeField] //编译器资源 变得可见
    private Animator anim;
    private Rigidbody rigid;
    private Vector3 planarVec;//平面移动向量
    private Vector3 thrustVec;//垂直冲量

    private bool lockPlanar = false;//锁死平面移动

抓组件:

    void Awake()// GetComponent尽量在Awake()里面做 提前抓好组件 
    {
     
        pi = GetComponent<PlayerInput>();
        anim = model.GetComponent<Animator>();
        rigid = GetComponent<Rigidbody>();//强调! rigid不要再update里面做,在fixedupdate里面做
    }

平滑调整animator forward的值以实现平滑切换状态 ,利用函数 Mathf.Lerp

anim.SetFloat("forward", pi.Dmag * Mathf.Lerp(anim.GetFloat("forward"), (pi.run ? 2.0f : 1.0f), 0.5f));

调整运动方向,同时应当注意,如果触键时间过短即(Dmag过小),应当不改变正方向

if (pi.Dmag > 0.1)
        {
     
           // Vector3 targetForward = Vector3.Slerp(model.transform.forward, pi.Dvec, 0.3f);//平滑渐变  整合到下面
            model.transform.forward = Vector3.Slerp(model.transform.forward, pi.Dvec, 0.3f);// 精华精华   数值*单位向量  转化forward单位向量的值 改变方向   旋转向量
        }

处理跑步速度:

        if (lockPlanar == false)
        {
     
            planarVec = pi.Dmag * model.transform.forward * walkSpeed*(pi.run ? runMultiplier : 1.0f);//跑步速度问题
        }

跳跃时的垂直分量

 rigid.velocity = new Vector3(planarVec.x, rigid.velocity.y, planarVec.z) + thrustVec;  //正确的velocity改写方法  加上垂直冲量 
 thrustVec = Vector3.zero;//清零 避免一直加

你可能感兴趣的:(unity,unity3d,游戏开发)