【问题标题】:Play animation with Xbox controller使用 Xbox 控制器播放动画
【发布时间】:2015-11-29 12:13:45
【问题描述】:

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

谢谢!

【问题讨论】:

  • 请注意,操纵杆可能没有完美校准,因此您需要忽略接近零的某个阈值的值。
  • 啊,太棒了! @rene,如果您发表评论作为答案,加上 SimpleVar 的评论,我将很乐意接受!

标签: c# animation unity3d controller xbox


【解决方案1】:

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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 2021-05-03
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多