使用 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
}
我正在制作一款可以使用键盘或 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
}