【问题标题】:Unity 2D Character Don't Stop JumpingUnity 2D 角色不要停止跳跃
【发布时间】:2019-08-27 17:14:14
【问题描述】:

好的,所以我更改了代码并添加了新的 c# 脚本。我检查了盒子 coliders 他们很好。现在的问题是我不能跳。

这是我在 Move2DPlayer 中所做的更改

private void Jump()
    {
        if (Input.GetButtonDown("Jump") && isGrounded == true)
        {
          gameObject.GetComponent<Rigidbody2D>().AddForce(new Vector2(0f, 5f), ForceMode2D.Impulse);
        }
    }

这是新的 c#,它被称为“Grounded”

public class Grounded : MonoBehaviour
{
    GameObject Player;

    private void Start()
    {
        Player = gameObject.transform.parent.gameObject;

    }


    private void Update()
    {

    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.collider.tag == "Ground")
        {
            Player.GetComponent<Move2DPlayer>().isGrounded = true;
        }
    }

    private void OnCollisionExit2D(Collision2D collision)
    {
        if (collision.collider.tag == "Ground")
        {
            Player.GetComponent<Move2DPlayer>().isGrounded = false;
        }
    }
}

【问题讨论】:

  • 你检查你的碰撞层和whatIsGround了吗? Physics2D.OverlapCircle(rb.position, checkRadius, whatIsGround); 是否有可能总是返回 true,因为它与玩家对撞机本身重叠?因为我在没有更改任何内容的情况下测试了您的代码,它对我有用,包括空中的额外跳跃。在那之后,我直到回到地面才能跳,所以它必须是你的层

标签: c# visual-studio unity3d


【解决方案1】:

您的播放器本身可能有一个Collider2D,而whatIsGround 配置不正确,或者您的播放器的层有误,所以

Physics2D.OverlapCircle(rb.position, checkRadius, whatIsGround);

总是返回true,因为你与播放器本身发生了碰撞。

我在没有任何更改的情况下测试了您的代码,它适用于我:


但是一些性能和其他注意事项:

  • 不要在UpdateFixedUpdate 中使用Debug.Log .. 对于开发来说这很好,但请确保稍后将其删除!性能非常高。

  • 您可以将 Inspector 设置为调试模式。

    这样你可以看到私有字段的值,你应该注意到isGrounded在你的情况下可能总是true

  • 只是一个美化的东西,而不是somebool == truesomebool == false,而是简单地使用somebool!somebool

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多