对象改变旋转跳转到它原来的 Unity3D
Objects changed rotation jumps to it's original Unity3D
我做了手游的输入摇杆。一个移动玩家,另一个改变它的旋转。两者都工作正常,但唯一的问题是,当我改变玩家轮换并释放操纵杆时,它会跳到原来的轮换。这是我的脚本:
public GameObject player;
private PlayerInput playerInput;
void Update()
{
Vector2 input = playerInput.actions["Move"].ReadValue<Vector2>();
Vector3 move = new Vector3(input.x, input.y, 0);
player.transform.position += move * speed * Time.deltaTime;
Vector2 look = playerInput.actions["Look"].ReadValue<Vector2>();
player.transform.rotation = Quaternion.LookRotation(Vector3.forward, look);
}
我通常通过忽略较小的旋转值并在所述情况下保持最后一帧的方向来解决这个问题。您可能需要调整以下阈值以过滤出正确的值。
public GameObject player;
private PlayerInput playerInput;
private Vector2 look;
void Update()
{
Vector2 input = playerInput.actions["Move"].ReadValue<Vector2>();
Vector3 move = new Vector3(input.x, input.y, 0);
player.transform.position += move * speed * Time.deltaTime;
var inputLook = playerInput.actions["Look"].ReadValue<Vector2>();
look = inputLook.magnitude > 0.1f ? inputLook : look;
player.transform.rotation = Quaternion.LookRotation(Vector3.forward, look);
}
我做了手游的输入摇杆。一个移动玩家,另一个改变它的旋转。两者都工作正常,但唯一的问题是,当我改变玩家轮换并释放操纵杆时,它会跳到原来的轮换。这是我的脚本:
public GameObject player;
private PlayerInput playerInput;
void Update()
{
Vector2 input = playerInput.actions["Move"].ReadValue<Vector2>();
Vector3 move = new Vector3(input.x, input.y, 0);
player.transform.position += move * speed * Time.deltaTime;
Vector2 look = playerInput.actions["Look"].ReadValue<Vector2>();
player.transform.rotation = Quaternion.LookRotation(Vector3.forward, look);
}
我通常通过忽略较小的旋转值并在所述情况下保持最后一帧的方向来解决这个问题。您可能需要调整以下阈值以过滤出正确的值。
public GameObject player;
private PlayerInput playerInput;
private Vector2 look;
void Update()
{
Vector2 input = playerInput.actions["Move"].ReadValue<Vector2>();
Vector3 move = new Vector3(input.x, input.y, 0);
player.transform.position += move * speed * Time.deltaTime;
var inputLook = playerInput.actions["Look"].ReadValue<Vector2>();
look = inputLook.magnitude > 0.1f ? inputLook : look;
player.transform.rotation = Quaternion.LookRotation(Vector3.forward, look);
}