Unity3d Unity 2D-跳转函数不';我不能正常工作

Unity3d Unity 2D-跳转函数不';我不能正常工作,unity3d,Unity3d,我不熟悉编码和Unity2D,所以请耐心听我说 我创建了一个角色控制器,它通过针对UI按钮对象设置的EventTriggers调用。控制器工作得很好(虽然可能有点过分),但下面是关于跳转函数的挑战。非常感谢您在这方面的帮助 非常感谢 挑战 即使在静止状态下,玩家也会朝正确的方向跳跃 即使在空中,运动员也能保持跳跃 以下是脚本: 使用系统集合; 使用System.Collections.Generic; 使用UnityEngine; 公共类游戏控制器:单行为 { 刚体2d rb2d; 喷洒器;

我不熟悉编码和Unity2D,所以请耐心听我说

我创建了一个角色控制器,它通过针对UI按钮对象设置的EventTriggers调用。控制器工作得很好(虽然可能有点过分),但下面是关于跳转函数的挑战。非常感谢您在这方面的帮助

非常感谢

挑战

  • 即使在静止状态下,玩家也会朝正确的方向跳跃
  • 即使在空中,运动员也能保持跳跃
以下是脚本:

使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类游戏控制器:单行为
{
刚体2d rb2d;
喷洒器;
动画师;
公开审查;

private LayerMask groundLayer=1问题出现在固定更新的末尾。这就是您的问题:

if (moveJump && (rb2d.velocity.y == 0))
{
    rb2d.velocity = new Vector2(verticalMove, rb2d.velocity.x * jumpForce);
    animator.Play("PlayerJump");
    Debug.Log("Function - Player Moving Up!");
}
让我们看一下开头。它说的是
if(moveJump&&(rb2d.velocity.y==0)
。所以,(我假设当他们点击跳转按钮时你正在设置moveJump),如果你点击跳转按钮,y速度为0。但是,这与球员是否在地面无关。我们应该将它改为
if(moveJump&&isGrounded)
。这样,在跳转之前,它会检查isground是否为true

当你改变速度跳跃时,我注意到几个问题。它是这样说的:

rb2d.velocity = new Vector2(verticalMove, rb2d.velocity.x * jumpForce);
创建新矢量2时,第一个参数是x,第二个参数是y。您按相反的顺序进行操作。先是y,然后是x。您应该这样交换它们:

rb2d.velocity = new Vector2(rb2d.velocity.x, verticalMove * jumpForce);
由于此交换,您将跳转应用于x轴,将移动应用于y轴,但现在已修复

这是所有更改的总和:

if (moveJump && (rb2d.velocity.y == 0))
{
    rb2d.velocity = new Vector2(verticalMove, rb2d.velocity.x * jumpForce);
    animator.Play("PlayerJump");
    Debug.Log("Function - Player Moving Up!");
}

非常感谢!这解决了问题!谢谢!然后请点击复选标记接受答案,以向其他开发人员表明这解决了问题(加上它给了你2个声誉)