当我的球员跳跃时,他只能在同一个地方跳跃——不知道为什么



我可能一个月前才开始学习统一,所以对C#语言非常陌生。所以我只是遵循了一个教程,在我的玩家中添加了一个以上的跳跃,但在我注入代码后,他在移动时无法跳跃。他现在只在同一个地方跳。我搞不清楚这个问题。


void Update()
{
HandleInput();
if (isGrounded == true)
{
extraJumps = extraJumpsValue;
}
if (Input.GetKeyDown(KeyCode.Space) && extraJumps > 0)
{
myRigidbody.velocity = Vector2.up * jumpForce;
extraJumps--;
}
else if (Input.GetKeyDown(KeyCode.Space) && extraJumps == 0 && isGrounded == true)
{
myRigidbody.velocity = Vector2.up * jumpForce;
}
}

问题是两个操作之间发生了重叠,由于我们看不到您的移动代码,我不确定还有什么原因会导致这个问题,但这个代码有一个陷阱,那就是:

myRigidbody.velocity=Vector2.up*jumpForce;

这行将把对象的速度0值放在x轴上,jumpForce值放在y轴上,所以无论你在x轴做什么(移动、跑步…(,它都会停止,只能在y轴和垂直方向上用jumpForce值跳跃,这就是你的情况,因为我假设你正在使用相同的方式来实现你的移动代码。因此,为了避免这个陷阱,你需要给物体的状态增加力,使其保持动态,而不是静态控制(这是一种糟糕的做法(:

myRigidbody。AddForce(Vector2.up*jumpForce(;

有关AddForce的详细信息,请检查此项:https://docs.unity3d.com/ScriptReference/Rigidbody2D.AddForce.html

如果你可以把你的运动代码,这样我们就可以检查它,或者为你写另一个代码。祝好运

由于我不知道你的移动代码,我只是假设它没问题。角色控制器的可能有问题。isGrounded。试着在控制台上记录它,看看它在移动时返回什么。它有时行为不端。如果是这样的话,你可以:

  • 确保施加一些向下的力(例如重力(
  • 使用RayCast实现您自己的地面检测(Youtube上有很多教程(

最新更新