我还在学习基础知识,所以请稍微温和一点。我正在研究滚球游戏的 ActionScript 。我已经让滚动工作得很好,但现在我正在尝试添加跳跃的能力。
在我的例子中,“玩家”是一个基本的球体。我想要完成的是,当空间被按下时,球会按照它当前滚动的方向跳到空中。
这是我自己尝试过的,但给出了非常奇怪的结果:
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
来完成所有移动代码,因为您正在移动位置,并且使用 Rigidbody
来完成所有基于物理的工作,因为您正在将物理应用到 游戏对象
! :)
关于c# - 让玩家在 Unity3D 中正确跳跃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34038224/