Dibujo un riel en mi personaje central con la dirección del frente de mi cámara. Uso Rigidbody.LookRotation para hacer que el personaje regrese a ese punto, pero no es así.
private void Update() { Physics.Raycast(transform.position + new Vector3(0, 3, 0), mainCam.transform.forward, out hit); Quaternion lookrotation = Quaternion.LookRotation(new Vector3(hit.point.x,0,hit.point.z)); transform.rotation = Quaternion.Slerp(transform.rotation, lookrotation, Time.deltaTime * 2); Debug.DrawLine(transform.position + new Vector3(0, 3, 0),hit.point); Debug.Log(hit.collider.gameObject.name); }A primera vista hay dos puntos:
LookRotation espera una dirección de avance... actualmente solo le das una posición .
preferirías usar, por ejemplo
if(Physics.Raycast(transform.position + new Vector3(0, 3, 0), mainCam.transform.forward, out var hit)) { var direction = hit.point - transform.position; direction.y = 0; var lookrotation = Quaternion.LookRotation(direction); ... } actualmente también giras muy lento. Asumiendo 60 Fps Cada fotograma que interpola con un factor de aproximadamente 1/60 * 2 , por lo que aproximadamente 0.033.. desde la rotación actual hacia la rotación objetivo. Entonces, esto se vuelve aún más lento cuanto más te acercas a la rotación objetivo.
Preferiría no multiplicar por Time.deltaTime sino usar un factor constante, por ejemplo, 0.5f
o use RotateTowards y proporcione un continuo anglePerSecond * Time.deltaTime .