让玩家在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

这导致球有时会跳错方向,或者只是加速到某个方向而根本不跳。很明显,我离得越来越近了,但还没有完全达到。有人能解释一下我做错了什么以及如何解决吗?

不寻求快速解决方案!不要从中学到任何东西

让玩家在Unity3D中正确跳跃

试试这个:)

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