Unity - 为什么这只能在if语句中使用

时间:2017-04-17 13:48:18

标签: c# unity3d

我在移动角色时遇到了问题。

以下代码有效。

        if (controller.isGrounded)
        {
            // X/Z Movement
            moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
            moveDirection = transform.TransformDirection(moveDirection);
            moveDirection *= speed;
            // Y Movement.
            if (Input.GetButtonDown("Jump"))
                moveDirection.y = jumpForce;
        }
        // Apply gravity.
        moveDirection.y -= grav * Time.deltaTime;
        // Move the player.
        print(moveDirection);
        controller.Move(moveDirection * Time.deltaTime);

但是,如果我在if语句之前移动X / Z Movement和Y Movement注释之间的所有内容,则玩家只会减少一小部分而不是增加它们在空中的时间越长。任何人都知道发生了什么?

2 个答案:

答案 0 :(得分:0)

糟糕。因为我重置了每个循环更新的moveDirection.y而不是堆叠重力,它重置为0然后应用 - = grav * Time.deltatime

答案 1 :(得分:0)

几周前,我在实际上遇到了同样的问题,我想我可以提供帮助: 实际问题'你看到来自这里:

moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));

如果播放器接地,则没有理由在Y轴上移动它,因此它的值为0,但如果将其移到Update之外,则会不断重置每个帧。

现在这一行:moveDirection.y -= grav * Time.deltaTime;从Vector3中减去Y上的0而不是来自moveDirection.y = jumpForce;

创建的moveVector的Y

希望这有帮助。