如何将操纵杆输入舍入为 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);