1

目标
所以我希望我的游戏支持 xbox / playstation 控制器。我希望操纵杆允许您以一种速度向左/向右移动,无论操纵杆移动多远。

问题
然而,当我用控制器测试游戏时,稍微推动操纵杆会使角色移动得更慢。

代码

void Update() {
   //Takes input for running and returns a value from 1 (right) to -1 (left)
   xInput = Input.GetAxisRaw("Horizontal");

   Jump();  
}

当然,这个“错误”是由于控制器能够返回 -1 和 1 之间的浮点值而引起的。
但是我想知道如何将此值四舍五入为 -1 或 1,或者以某种方式禁用控制器返回 a浮动值,因为类似

xInput = Input.GetAxisRaw("Horizontal") > 0 ? 1 : -1;

表示 [no input] 将返回 -1,并且

if (Input.GetAxisRaw("Horizontal") > 0) {
   xInput = 1;
} else if (Input.GetAxisRaw("Horizontal") < 0) {
   xInput = -1;
}

只是看起来不必要而且不优雅

4

1 回答 1

2

如果我理解你正确,你正在寻找Math.Sign

  • -1如果参数是否定的
  • 0如果参数为零
  • 1如果参数是肯定的

代码:

xInput = Math.Sign(Input.GetAxisRaw("Horizontal"));

编辑:

如果我们想要某种死区(即xInput == 0如果幅度小于 some tolerance),请参阅Chuck Walbourn 的评论

float tolerance = ...;

xInput = Input.GetAxisRaw("Horizontal");

xInput = Math.Abs(xInput) < tolerance
  ? 0.0
  : Math.Sign(xInput);
于 2022-01-09T19:46:45.350 回答