使用Xbox控制器播放动画

时间:2015-11-29 12:13:46

标签: c# animation unity3d controller xbox

我正在制作一款可以使用键盘或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()返回一个浮点而不是bool(?),因此不能放入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

谢谢!

1 个答案:

答案 0 :(得分:2)

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

如果您将此与threshold for values close to zero一起考虑在内,则可以确定是需要上升还是下降或需要停止。

您的实施将如下所示:

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
}