2017-04-04 89 views
0

正如标题所说,我希望通过使用Xbox控制器的左侧拇指和Input.GetAxis()方法来逐步提高移动速度。问题是我需要规范化运动矢量,以阻止对角线运动比前进,后退等运动更快。正常化会自动产生量级1,所以我失去了控制左手拇指位置的速度的能力。提前致谢!使用标准化速度逐渐提高移动速度

可以控制拇指杆位置的速度量,但是对角线移动速度比其他移动速度快。

Vector3 moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); 

    rigidBody.MovePosition(transform.position + moveDirection * moveSpeed * Time.deltaTime); 

无法用拇指棒的位置控制速度量,但对角线运动速度与其他运动速度相同。

Vector3 moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); 

    rigidBody.MovePosition(transform.position + moveDirection.normalized * moveSpeed * Time.deltaTime); 
+0

尝试rigidBody.position = transform.position + moveDirection.normalized * MOVESPEED * Time.deltaTime; –

+0

@CổChíTâm感谢您的回复,在这种情况下更改不会影响任何内容。 – jozza710

回答

1

而不是正常化或缩放:钳。

Vector3 input = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); 
Vector3 moveDirection = new Vector3(
    Mathf.Clamp(input.x, -Mathf.Abs(input.normalized.x), Mathf.Abs(input.normalized.x)), 
    0, 
    Mathf.Clamp(input.z, -Mathf.Abs(input.normalized.z), Mathf.Abs(input.normalized.z)) 
); 

rigidBody.MovePosition(transform.position + moveDirection * moveSpeed * Time.deltaTime); 

在单位圆内的所有值将保持不变,而在单位圆外的值被重新计算为在单位圆上。

也可以写为:

Vector3 move = (input.magnitude<1?input:input.normalized); 
0

这个问题可能有更好的解决方案,但这是我解决它的方法。我将留下回答这个问题的能力,以便看看其他人是否有更好的解决方案。

Vector3 moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); 

    rigidBody.MovePosition(transform.position + new Vector3(moveDirection.normalized.x * moveSpeed * Time.deltaTime * Mathf.Abs(moveDirection.x), 0, 
                  moveDirection.normalized.z * moveSpeed * Time.deltaTime * Mathf.Abs(moveDirection.z)));