让玩家在Unity3D中正确跳转

时间:2015-12-02 08:42:27

标签: c# unity3d

我还在学习基础知识,所以请稍微温柔一点。我正在研究一个滚球比赛的运动脚本。我已经完成了很好的工作,但现在我试图增加跳跃的能力。

在我的情况下,"播放器"是一个基本的球体。我想要完成的是,当空间被按下时,球会朝着它正在滚动的方向跳跃到空中。

这是我自己尝试过的,但却给出了非常奇怪的结果:

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

这导致球有时会向错误的方向跳跃,或者只是在没有跳跃的情况下加速到某个方向。显然,我越来越近了,但还没到那里。任何人都可以解释我做错了什么以及如何解决它?

不寻找快速修复!不要从中学到任何东西。

2 个答案:

答案 0 :(得分:2)

试试这个:)

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执行所有移动代码,因为您正在移动位置,并使用Rigidbody进行所有基于物理的工作,因为您将物理应用于GameObject! :)

答案 1 :(得分:0)

添加到接受的答案:跳转到随机方向问题可能是由transform.up引起的。该向量是相对于当前变换的向上方向 。除非您旋转游戏对象,否则这通常与实际向上方向相同。在这种情况下,由于物体恰好是一个滚球,它很可能会旋转。

您可以使用全局向上方向来修复它 - 或者通过在接受的答案中执行,或者使用Vector3.up