统一使操纵杆始终导致速度 1
Unity make Joystick always result in speed 1
所以我有一个操纵杆对象,它为每个轴提供了 -1 到 1 的值。
float horizontalMove = joystick.Horizontal * speed;
float verticalMove = joystick.Vertical * speed;
rb.velocity = new Vector3(horizontalMove, verticalMove, 0);
现在,我想要的是无论你在每个方向上拉动操纵杆多远,它总是会导致速度 1。就像我现在的代码是如何工作的,但我的操纵杆总是被拉到边缘。我也做到了最大。 1方向可以设置为0.
您可以使用向量的 .normalized
属性,确保它的长度为 1,或等于 Vector3.zero
。
rb.velocity = new Vector3(horizontalMove, verticalMove, 0).normalized;
与在每个轴上使用 Mathf.Sign
不同,向量的角度会保留,因此玩家仍然可以在任何方向上移动,而不仅仅是沿轴和对角线移动。
所以我有一个操纵杆对象,它为每个轴提供了 -1 到 1 的值。
float horizontalMove = joystick.Horizontal * speed;
float verticalMove = joystick.Vertical * speed;
rb.velocity = new Vector3(horizontalMove, verticalMove, 0);
现在,我想要的是无论你在每个方向上拉动操纵杆多远,它总是会导致速度 1。就像我现在的代码是如何工作的,但我的操纵杆总是被拉到边缘。我也做到了最大。 1方向可以设置为0.
您可以使用向量的 .normalized
属性,确保它的长度为 1,或等于 Vector3.zero
。
rb.velocity = new Vector3(horizontalMove, verticalMove, 0).normalized;
与在每个轴上使用 Mathf.Sign
不同,向量的角度会保留,因此玩家仍然可以在任何方向上移动,而不仅仅是沿轴和对角线移动。