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 运动的主要内容,如果未能解决你的问题,请参考以下文章
Unity:3D 运动/碰撞检测失败(AddForce、MovePosition、transform.localPosition)