C# Unity 3d播放器跳跃不起作用,rb.addforce不起作用
我有一个非常基本的无限跑者,我想让我的球员跳跃。我将刚体附加到我的播放器上,并将其实例化。这是我代码的一部分C# Unity 3d播放器跳跃不起作用,rb.addforce不起作用,c#,unity3d,game-physics,rigid-bodies,C#,Unity3d,Game Physics,Rigid Bodies,我有一个非常基本的无限跑者,我想让我的球员跳跃。我将刚体附加到我的播放器上,并将其实例化。这是我代码的一部分 void FixedUpdate() { if (OnGround) { if (Input.GetKeyDown(KeyCode.Space)) { rBody.AddForce(new Vector3(0, 10, 0), ForceMode.Impulse); Debug.Log("
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;
}
}
我试着把这部分更新,没有结果。
有趣的是,Debug.Logjump显示在控制台上,但玩家不想跳转。
方法void CollisonOther从未被调用。
我也尝试过改变速度并使用transform.translate,没有结果
跳。我怎样才能让它跳跃呢?有几件事可能是问题所在。确保取消选中IsMotional框。也有可能是角色在跳跃,但是如果精灵导入的太大,你就看不到它了,也就是说:相对于大小,它跳跃的量非常非常小。您可以尝试打印更多有关角色位置的调试语句,以查看角色位置是否实际发生了变化。OnCollisionCenter应该使用大写字母O,而不是小写字母。如前所述,永远不会输入OnCollisionCenter 这是唯一可能出错的代码问题,假设您实际正确地分配了其他变量。然而,可能存在多种与游戏对象相关的行为 地面标记是否应用于您认为您的跑步者与之碰撞的游戏obejct?如果没有,它就不会跳
你的跳投刚体质量很高吗?默认值为1时,它会跳得很高,但如果质量较大,则无法获得正确的力。在代码中似乎是正确的,但不知道为什么不跳。顺便说一句,你可以试试这个代码 只需不使用AddForce并更改正在使用的检查即可
if (Input.GetButtonDown("Jump") && OnGround)
{
rBody.velocity = new Vector2(rBody.velocity.x, jumpSpeed);
}
确保它在更新方法下,因为在更新方法中输入调用。如果您的“OnGround”图层检查是
完美它应该可以工作。我遇到了同样的问题,经过数小时的调查,在我的情况下,它与代码无关,但下面的Unity bug在2020.1.6f1中仍然存在 出于某种原因,它干扰了我在您的案例getKeyCode.Space中的代码中检查的任何键输入
修复程序将编辑-项目设置-活动输入处理-选择两者。很难说是什么问题。代码看起来是正确的。需要检查的事项:刚体不能是运动学的和活动的。它的质量是多少?也许字符位置是从其他代码设置的?如果增加力会发生什么?是否尝试设置断点和?OnCollisionCenter以大写字母O开头,否则永远不会调用它!这可能是问题所在吗?当此碰撞器/刚体开始接触另一个刚体/碰撞器时,会调用OnCollisionCenter,如果碰撞对象未连接碰撞器/刚体,它将不会抖动。作为旁注,建议在更新方法流中进行所有输入调用。有关更多信息,请参阅。感谢您的回复。它真的不能跳:我已经检查了位置,刚体也一切正常,不是运动学的。谢谢你的回复。我已更正OnCollisionCenter语法。地面的标记已正确指定。我已经为我正在实例化的每个瓷砖指定了一个标记,如果有问题,我不知道。物体质量是一,物体本身很小。