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