微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Unity FPS 运动

如何解决Unity FPS 运动

我通过 youtube 教程创建了一个刚体 fps 控制器,除了对角线移动之外,一切正常,因为它的 x1,4 速度有问题。所以我尝试了 vector3.normalized 和 vector3.ClampMagnitude 但似乎这不是我的 fps 控制器解决方案的一个选项,因为速度变得恒定且不可改变。 原始代码

    x = Input.GetAxis("Horizontal") * speed * Time.deltaTime;
    z = Input.GetAxis("Vertical") * speed * Time.deltaTime;

    Vector3 moveVec = orientation.right * x + orientation.forward * z + Vector3.up * rb.veLocity.y;      
    rb.veLocity = moveVec;

所以我试过了

    x = Input.GetAxis("Horizontal") ;
    z = Input.GetAxis("Vertical");

    Vector3 moveVec = Vector3.ClampMagnitude(orientation.right * x + orientation.forward * z + 
    Vector3.up * rb.veLocity.y,1.0f) * speed * Time.deltaTime;      
    rb.veLocity = moveVec;   

它起作用了,但是当我撞到一个物体并且一些随机的 Y 变换会发生时,我在空中飞行,因为 rb.veLocity 也乘以速度和 deltaTime。有什么提示吗?

解决方法

将您的输入与当前速度分开,并将 speed 乘数仅应用于输入。

请注意,您正在处理以每秒 Unity 单位为单位的 速度。 => 你不想想在这里乘以Time.deltaTime

x = Input.GetAxis("Horizontal");
z = Input.GetAxis("Vertical");

Vector3 moveVec = Vector3.ClampMagnitude(orientation.right * x + orientation.forward * z,1.0f) * speed;
moveVec += Vector3.up * rb.velocity.y;    
rb.velocity = moveVec;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。