C# I';我想让我的2D统一角色跳跃

C# I';我想让我的2D统一角色跳跃,c#,unity3d,C#,Unity3d,正如我所说的,我试图让我的角色在Unity中跳跃,但是当我击中空间时什么都没有发生,Unity没有抛出任何错误 public class Player : MonoBehaviour { private Rigidbody2D myRigidbody; [SerializeField] public float jumpSpeed; private Animator myAnimator; [SerializeField] private f

正如我所说的,我试图让我的角色在Unity中跳跃,但是当我击中空间时什么都没有发生,Unity没有抛出任何错误

public class Player : MonoBehaviour
{
    private Rigidbody2D myRigidbody;

    [SerializeField]
    public float jumpSpeed;

    private Animator myAnimator;

    [SerializeField]
    private float movementSpeed;

    private bool facingLeft;

    [SerializeField]
    private Transform[] groundPoints;

    [SerializeField]
    private float groundRadius;

    [SerializeField]
    private LayerMask whatIsGround;

    private bool isGrounded;

    private bool jump;

    [SerializeField]
    private float jumpForce;

    // Start is called before the first frame update
    void Start()
    {
        facingLeft = true;
        myRigidbody = GetComponent<Rigidbody2D>();
        myAnimator = GetComponent<Animator>();

    }

    // Update is called once per frame
    void FixedUpdate()
    {
        float horizontal = Input.GetAxis("Horizontal");
        Debug.Log(horizontal);

        isGrounded = IsGrounded();

        HandleMovement(horizontal);

        flip(horizontal);

    }

    private void HandleMovement(float horizontal)
    {

        myRigidbody.velocity = new Vector2(horizontal * movementSpeed, myRigidbody.velocity.y);

        myAnimator.SetFloat("speed", Mathf.Abs(horizontal));

        if (isGrounded && jump)
        {
            isGrounded = false;
            myRigidbody. AddForce(new Vector2(0, jumpForce));
        }

    }

    private void HandleInput()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            jump = true;
        }
    }

    private void flip(float horizontal)
    {
        if (horizontal < 0 && !facingLeft || horizontal > 0 && facingLeft)
        {
            facingLeft = !facingLeft;

            Vector3 theScale = transform.localScale;

            theScale.x *= -1;

            transform.localScale = theScale;
        }
    }

    private bool IsGrounded()
    {
        if (myRigidbody.velocity.y <= 0)
        {
            foreach (Transform point in groundPoints)
            {
                Collider2D[] colliders = Physics2D.OverlapCircleAll(point.position, groundRadius, whatIsGround);

                for (int i = 0; i < colliders.Length; i++)
                {
                    if (colliders[i].gameObject != gameObject)
                    {
                        return true;
                    }
                }
            }
        }
        return false;
    }

}
公共类玩家:单行为
{
私人刚体;
[序列化字段]
公众浮标跳跃速度;
私人动画师;
[序列化字段]
私人浮动移动速度;
私人楼宇设施;
[序列化字段]
私有转换[]基点;
[序列化字段]
私人浮动地面半径;
[序列化字段]
私人甲板码头;
私人学校停课;
私人跳远;
[序列化字段]
私人部队;
//在第一帧更新之前调用Start
void Start()
{
facingLeft=真;
myRigidbody=GetComponent();

myAnimator=GetComponent教程,他的是跳跃式的,但我的不是。我认为这可能与我设置基点的方式有关,但我不确定这是代码中的错误还是统一性的错误。

你没有在任何地方调用HandleInput

添加到固定更新

void FixedUpdate()
{
    float horizontal = Input.GetAxis("Horizontal");
    Debug.Log(horizontal);

isGrounded = IsGrounded();

HandleMovement(horizontal);

flip(horizontal);

HandleInput(); // add this so you are sampling input

}

你没有在任何地方打电话给HandleInput

添加到固定更新

void FixedUpdate()
{
    float horizontal = Input.GetAxis("Horizontal");
    Debug.Log(horizontal);

isGrounded = IsGrounded();

HandleMovement(horizontal);

flip(horizontal);

HandleInput(); // add this so you are sampling input

}

出于某种原因,第一行代码没有出现在代码框中,它应该在那里。脚本是否附加到游戏对象并在序列化字段中填充值??为什么是固定更新而不是常规更新??为什么您认为错误来自于设置的基点?您是如何配置它们的?“为什么是固定更新而不是常规更新?”,这样游戏的速度就不会因你的fps而改变。“为什么你认为错误来自于设置的基点?你是如何配置它们的?”?"主要是因为这是我第一次这样做,我想我可能搞错了,我在这个角色上有三个基点,一个在左下角,一个在右下角,一个在这两个中间。由于某种原因,第一行代码没有出现在代码框中,它应该在那里。是脚本吗?附加到游戏对象和序列化字段中填充的值??为什么固定更新而不是定期更新??为什么您认为错误来自于设置的基点?您如何配置它们?“为什么固定更新而不是定期更新?”,这样游戏的速度就不会因fps而改变。“为什么您认为错误来自于接地点设置?您是如何配置它们的?”?"主要是因为这是我第一次这样做,我想我可能搞错了,我有三个基点上的字符,一个在左下角,一个在右下角,一个在中间的那两个。对不起,最近的答复,我把这个添加到代码,没有什么变化。代码,没有改变。