Unity - A计划(一年有效期) 扫二维码继续学习 二维码时效为半小时

(66评价)
价格: 1299.00元
1对1 答疑即时回复7天无理由退款30天价保提问必答

服务保障

1对1 答疑

提供专属的一对一在线答疑,快速答疑解惑。

即时回复

及时响应学习咨询,帮助解决问题。

7天无理由退款

购买后7天内可申请无理由退款。

30天价保

购买后30天内如遇降价,可申请价保。

提问必答

对于提问做到有问必答,帮您扫清学习过程中的种种障碍

Stealth秘密行动人物移动距离和动画不匹配
unsafe发起了问答2019-04-26
2
回复
527
浏览
    private void Update()
    {
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");

        if (Mathf.Abs(h) > 0.1 || Mathf.Abs(v) > 0.1)
        {
            float newSpeed = Mathf.Lerp(anim.GetFloat("tSpeed"), 5.667f, Time.deltaTime * moveSpeed);
            anim.SetFloat("tSpeed", newSpeed);

            Vector3 targetDir = new Vector3(h,0,v);
            Vector3 nowDir = transform.forward;
            float angle = Vector3.SignedAngle(nowDir, targetDir, Vector3.up);

            print(angle);
            
            transform.Rotate(Vector3.up*angle*Time.deltaTime* rotateSpeed);
        }
        else
        {
            anim.SetFloat("tSpeed", 0);
        }
    }

这是我控制人物移动的代码,我在按下按钮后角色只会一卡一卡的往前移动很短的距离,但是动画已经正常往前在走了。unity版本是2018.3.6f1.

所有回复
  • 老师_Trigger • 2019-04-26

    同学你好,转向用四元素,别用欧拉角,  

    Quaternion newRotation =  Quaternion.LookRotation(targetDir, Vector3.up);

    transform.rotation= Quaternion.Lerp(transform.rotation, newRotation, rotateSpeed * Time.deltaTime);

    另外检查一下其他参数的设置,可以下载一下老师源码检查排除一下问题。

    • unsafe • 2019-04-28

      找到原因了,是角色身上的rigidbody组件引起的,interpolate在2018.3.6f1版本下需要设置为Interpolate或Extrapolate,否则角色不会随着动画播放正确移动

      (0) 回复
    还有-4条回复,点击查看
    你还没有登录,请先登录或注册!
发表回复
你还没有登录,请先 登录或 注册!