如何将操纵杆输入舍入为 1 或 -1?
How to round joystick input to 1 or -1?
目标
所以我希望我的游戏支持 xbox / playstation 控制器。我希望操纵杆允许您以一种速度向左/向右移动,无论操纵杆移动多远。
问题
然而,当我用控制器测试游戏时,只推动操纵杆一点点会使角色移动得更慢。
代码
void Update() {
//Takes input for running and returns a value from 1 (right) to -1 (left)
xInput = Input.GetAxisRaw("Horizontal");
Jump();
}
当然这个'bug'是因为控制器有能力return一个介于-1和1之间的浮点值。
但是我想知道如何舍入这个值为 -1 或 1,或者以某种方式禁用控制器 return 浮点值的能力,因为类似于
xInput = Input.GetAxisRaw("Horizontal") > 0 ? 1 : -1;
表示[无输入]会return为-1,而
if (Input.GetAxisRaw("Horizontal") > 0) {
xInput = 1;
} else if (Input.GetAxisRaw("Horizontal") < 0) {
xInput = -1;
}
只是显得多余而不优雅
如果我的理解是正确的,您正在寻找 Math.Sign:
-1
如果参数为 负数
0
如果参数为 零
1
如果参数是 positive
代码:
xInput = Math.Sign(Input.GetAxisRaw("Horizontal"));
编辑:
如果我们想要某种死区(即xInput == 0
如果震级小于某些tolerance
),参见Chuck沃尔伯恩的评论:
float tolerance = ...;
xInput = Input.GetAxisRaw("Horizontal");
xInput = Math.Abs(xInput) < tolerance
? 0.0
: Math.Sign(xInput);
目标
所以我希望我的游戏支持 xbox / playstation 控制器。我希望操纵杆允许您以一种速度向左/向右移动,无论操纵杆移动多远。
问题
然而,当我用控制器测试游戏时,只推动操纵杆一点点会使角色移动得更慢。
代码
void Update() {
//Takes input for running and returns a value from 1 (right) to -1 (left)
xInput = Input.GetAxisRaw("Horizontal");
Jump();
}
当然这个'bug'是因为控制器有能力return一个介于-1和1之间的浮点值。
但是我想知道如何舍入这个值为 -1 或 1,或者以某种方式禁用控制器 return 浮点值的能力,因为类似于
xInput = Input.GetAxisRaw("Horizontal") > 0 ? 1 : -1;
表示[无输入]会return为-1,而
if (Input.GetAxisRaw("Horizontal") > 0) {
xInput = 1;
} else if (Input.GetAxisRaw("Horizontal") < 0) {
xInput = -1;
}
只是显得多余而不优雅
如果我的理解是正确的,您正在寻找 Math.Sign:
-1
如果参数为 负数0
如果参数为 零1
如果参数是 positive
代码:
xInput = Math.Sign(Input.GetAxisRaw("Horizontal"));
编辑:
如果我们想要某种死区(即xInput == 0
如果震级小于某些tolerance
),参见Chuck沃尔伯恩的评论:
float tolerance = ...;
xInput = Input.GetAxisRaw("Horizontal");
xInput = Math.Abs(xInput) < tolerance
? 0.0
: Math.Sign(xInput);