2015-12-02 72 views
3

我仍在学习基础知识,所以请稍微温柔。我正在研究滚动游戏的动作脚本。我的滚动效果非常好,但现在我试图增加跳跃的能力。让玩家在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

有在这个试试:)

if (Input.GetKey("space")) 
{ 
    rigidbody.AddForce(new Vector3(0, yourJumpForce, 0), ForceMode.Impulse); 
} 

你也可能会希望在刚体重力设置捣鼓得到您想要的跳跃,以及!

编辑说明

我想这可能是因为你申请你运动到你的Rigidbody,但你的跳跃方法将Transform本身。

A Rigidbody是一个物理组件(请参见docs.unity3d.com/ScriptReference/Rigidbody.html),其中Transform用于处理位置,旋转和缩放。

跳可能被认为是一个物理问题 - 因此改变跳是与物理(Rigidbody),而不是位置(Transform)。我倾向于使用Transform执行所有移动代码,因为您正在移动位置,并且使用Rigidbody完成所有基于物理的工作,因为您正在将物理应用到GameObject! :)

+0

这似乎工作得很好。谢谢。但是,你能解释为什么我的解决方案不起作用吗?我试图理解我在做什么,而不是盲目地复制/粘贴。 – icecub

+0

太棒了。我想我可以用这个工作。再次感谢! :)顺便说一句:我确实设法通过互联网使它成为多人游戏。 Ppl可以加入他们自己的球并开始滚动xDD – icecub

+0

好东西,我已经拿出了评论,并将它们包含在我的回答中:) – Tom

0

要添加到接受的答案:跳转到随机指示问题可能是由transform.up造成的。该向量相对于当前变换向上方向。除了旋转游戏对象之外,通常与实际的向上方向相同。而在这种情况下,对象碰巧是一个滚动球,它很可能是旋转的。

您可以使用全局向上方向来修复它 - 或者像接受的答案那样做,或者使用Vector3.up