正如标题所说,我希望使用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 :(得分: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);
答案 1 :(得分: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)));