让玩家在Unity3D中正确跳跃
本文关键字:跳跃 Unity3D 玩家 | 更新日期: 2023-09-27 18:25:15
我还在学习基础知识,所以请温柔一点。我正在写一个滚球游戏的动作脚本。我的翻滚动作很好,但现在我正在努力增加跳跃的能力。
在我的例子中,"玩家"是一个基本的球体。我试图实现的是,当空间被挤压时,球会朝着当前滚动的方向跳到空中。
这是我自己尝试过的,但结果非常奇怪:
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
if (Input.GetKey("space"))
{
transform.position += transform.up * 20 * Time.deltaTime;
}
rb.AddForce(movement * speed); //rb = RigidBody
这导致球有时会跳错方向,或者只是加速到某个方向而根本不跳。很明显,我离得越来越近了,但还没有完全达到。有人能解释一下我做错了什么以及如何解决吗?
不寻求快速解决方案!不要从中学到任何东西
试试这个:)
if (Input.GetKey("space"))
{
rigidbody.AddForce(new Vector3(0, yourJumpForce, 0), ForceMode.Impulse);
}
你可能还想摆弄刚体中的重力设置,以获得你想要的跳跃!
编辑解释:
我认为这可能是因为你把你的动作应用于你的Rigidbody
,但你的跳跃方法应用于Transform
本身。
Rigidbody
是一个物理组件(请参阅docs.unity3d.com/ScriptReference/Rigidbody.html),其中Transform
与位置、旋转和缩放有关。
跳跃可以被认为是一个物理问题,因此改变跳跃与物理(Rigidbody
)有关,而不是与位置(Transform
)有关。当你移动位置时,我倾向于用Transform
做所有的移动代码,而当你把物理应用到GameObject
时,我则用Rigidbody
做所有基于物理的工作!:)
添加到已接受的答案中:跳转到随机方向的问题可能是由transform.up
引起的。该向量是相对于当前变换的向上方向。这通常与实际的向上方向相同,除非你旋转游戏对象。在这种情况下,当物体恰好是一个滚动的球时,它很可能是旋转的。
您可以改为使用全局向上方向来修复它——可以像在接受的答案中一样进行,也可以使用Vector3.up
。