[英]Unity 3d player jump does't work, rb.addforce doesn't work
我有一个非常基本的infinite runner
,我想让我的球员跳跃。 我已将rigidbody
附加到我的播放器上,并对其进行了实例化。 这是我代码的一部分
void FixedUpdate()
{
if (OnGround)
{
if (Input.GetKeyDown(KeyCode.Space))
{
rBody.AddForce(new Vector3(0, 10, 0), ForceMode.Impulse);
Debug.Log("jump");
OnGround = false;
}
}
}
void onCollisionEnter(Collision other)
{
Debug.Log("collision");
if (other.gameObject.CompareTag("ground"))
{
OnGround = true;
}
}
我试图把这部分放在Update()
,没有结果。 有趣的部分是Debug.Log("jump")
显示在控制台上,但玩家不想跳转。 方法void CollisonOther()
永远不会被调用。 我也尝试过改变velocity
并使用transform.translate
,没有结果
跳。 我怎样才能让它跳起来?
有几件事可能是问题所在。 确保未选中 isKinematic 框。 也有可能角色正在跳跃,但如果您的精灵导入太大,您将看不到它(即:相对于大小,它的跳跃量非常小)。 您可以尝试打印更多角色位置的调试语句,以查看它是否确实在更改。
OnCollisionEnter 应该有一个大写的 O 而不是小写。 正如所写,永远不会输入 onCollisionEnter。
这是唯一可能出错的代码问题,假设您实际上正确地分配了其他变量。 但是,可能存在各种与游戏对象相关的行为。
地面标签是否应用于您认为跑步者正在碰撞的游戏对象? 如果没有,它不会跳。
跳跃者刚体的质量是否非常高? 默认值为 1,它跳得相当高,但如果质量较大,则无法获得适当的力。
它在您的代码中似乎是正确的,但不知道为什么不跳。 顺便说一句,您可以在没有 AddForce 的情况下尝试使用此代码并更改您正在使用的检查。
if (Input.GetButtonDown("Jump") && OnGround)
{
rBody.velocity = new Vector2(rBody.velocity.x, jumpSpeed);
}
确保它在您的 Update 方法下,因为 Input 在 Update 方法中调用。 如果您的“OnGround”层检查是完美的,它应该可以工作。
我遇到了同样的问题,经过数小时的调查,在我的情况下,它与代码无关,而是与下面的 Unity 错误(仍然存在于 2020.1.6f1 中)有关。
出于某种原因,它干扰了我在代码中检查的任何键输入(在您的情况下为 GetKey(KeyCode.Space)
修复程序是编辑 - 项目设置 - 活动输入处理 - 选择两者。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.