使用 Xbox 控制器播放动画

Play animation with Xbox controller

我正在制作一款可以使用键盘或 Xbox One 控制器作为移动的 2d 游戏。

到目前为止,我可以使用键盘移动玩家并播放 运行 动画、跳跃动画等,我还可以使用 Xbox 控制器移动。

但是,我无法使用 Xbox 控制器播放动画。

我有这个:

void Update()
{
    movement.x = Input.GetAxis("LeftJoystickX") * speed * Time.deltaTime;

            // Orange player movement
            if (orange)
            {
                transform.position += movement;

                if (Input.GetKey(KeyCode.D))
                {
                    ChangeDirection("right");
                    ChangeState(STATE_RUN);
                    transform.position += Vector3.right * speed * Time.deltaTime;
                    if (!onGround)
                        ChangeState(STATE_JUMP);
                }
            }
}

在这里,如果你使用键盘,动画就会播放。如果您使用控制器,播放器会移动但动画不会播放。我已经 尝试了 并将范围缩小到这段代码不会计算的事实:

if (Input.GetAxis("LeftJoystickX"))

作为 Input.GetAxis() returns 浮点数而不是布尔值 (?),因此不能放在 if 语句中。

我想我想问的是,是否可以检测控制器的操纵杆推动方向,例如 Input.GetAxis().joystickPushedRight

或者更好的是,有没有不同的执行方式

 if (Input.GetKey(KeyCode.D))
        {
            ChangeDirection("right");
            ChangeState(STATE_RUN);
            transform.position += Vector3.right * speed * Time.deltaTime;
            if (!onGround)
                ChangeState(STATE_JUMP);
        }

但使用操纵杆而不是 Input.GetKey?

谢谢!

Input.GetAxis returns 介于 -1 和 1 之间的浮点数。

如果您将这一点与 一起考虑,您可以确定是否需要上涨或下跌或需要停止。

您的实施将如下所示:

const float threshold = 0.05;
const string axis = "LeftJoystickX";
if (Input.GetAxis(axis) < -threshold)
{
  //go left
} 
else if (Input.GetAxis(axis) > threshold) 
{
   //go right
} 
else 
{
   // don't move
}