Unity FPS 运动

Posted

技术标签:

【中文标题】Unity FPS 运动【英文标题】:Unity FPS Movement 【发布时间】:2021-03-20 22:20:35 【问题描述】:

我通过 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。有什么建议吗?

【问题讨论】:

【参考方案1】:

将您的输入与当前速度分开,并将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;

【讨论】:

非常感谢,这正是我想不通的)

以上是关于Unity FPS 运动的主要内容,如果未能解决你的问题,请参考以下文章

具有基本矩阵变换(WebGL)的类FPS相机运动

ThreeJS FPS 下降

unity 如何让物体匀加速和匀减速运动,求代码

unity中鼠标点击触发物体运动

Unity 物体轨迹移动

Unity:3D 运动/碰撞检测失败(AddForce、MovePosition、transform.localPosition)