Character MoveLook rotation locked?

Hey there! So I have tried to make my Character Rotate when I am walking around with Vertical and Horizontal Axis. Though the closest I got to make it work was this script. Though my only problem with the script is that when I stop moving it resets it self by looking the same direction as when I spawn the player. Anyone who knows why?

using UnityEngine;
using System.Collections;

public class MoveLook : MonoBehaviour {
	
	public float lookSpeed = 10;
	private Vector3 curLoc;
	private Vector3 prevLoc;
	
	void Update () 
	{
		InputListen();
		transform.rotation = Quaternion.Lerp (transform.rotation,  Quaternion.LookRotation(transform.position - prevLoc), Time.fixedDeltaTime * lookSpeed);
	}
	
	private void InputListen()
	{
				prevLoc = curLoc;
				curLoc = transform.position;
	
	if (Input.GetKey (KeyCode.A))
		curLoc.x -= 1 * Time.fixedDeltaTime;
	if (Input.GetKey (KeyCode.D))
		curLoc.x += 1 * Time.fixedDeltaTime;
	if (Input.GetKey (KeyCode.W))
		curLoc.z += 1 * Time.fixedDeltaTime;
	if (Input.GetKey (KeyCode.S))
		curLoc.z -= 1 * Time.fixedDeltaTime;
		
		transform.position = curLoc;
		
	}
}

1 Answer

1

What’s happening is that Quaternion.LookRotation(transform.position - prevLoc) makes no sense when you’re standing still - as transform.position and prevLoc is the same, you’re getting the lookRotation for 0. That should log an error, by the way.

A simple fix would simply be to check if the player is moving before you rotate it:

if(transform.position != prevloc) {
    transform.rotation = ...
}

That will probably cause some problems - if you’re facing right and quickly press ‘a’, your character won’t turn all the way around. If that’s a problem or not is completely dependent on how your game works.