我还在学习基础知识,所以请稍微温柔一点。我正在研究一个滚球比赛的运动脚本。我已经完成了很好的工作,但现在我试图增加跳跃的能力。
在我的情况下,"播放器"是一个基本的球体。我想要完成的是,当空间被按下时,球会朝着它正在滚动的方向跳跃到空中。
这是我自己尝试过的,但却给出了非常奇怪的结果:
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
这导致球有时会向错误的方向跳跃,或者只是在没有跳跃的情况下加速到某个方向。显然,我越来越近了,但还没到那里。任何人都可以解释我做错了什么以及如何解决它?
不寻找快速修复!不要从中学到任何东西。
答案 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
。