- Home /
Look rotation viewing is zero warning
Sorry for the noob question, and also for my bad english.
I am following a tutorial on how to get started with the basics of unity. I'm at a part of it that is teaching me how to rotate a player according to the direction it is moving, so that it will face said direction. Since the destination of said movement is set to a Vector 3 variable called "currentMovement" , I thought that using "transform.rotation = Quaternion.LookRotation(currentMovement)" would work. It indeed works when the player is moving, but when the player just stays put Unity gives a warning saying "Look rotation viewing is zero" and then the player object starts to glitch (and by glitch I mean starting to constantly alternate between random rotations or something like that). The tutorial said/told that the fix to this would be to use "Quaternion.LookRotation(new Vector3(currentMovement.x, 0, currentMovement.z))" instead of the code I used, since currentMovement.y is set to 0 when the player is on the ground (and said player WAS standing on the groun), and apparentely you can't give a zero value to a look rotation (as indicated by the warning). **But the solution proposed also sets the y axis to 0, so why did it work?**It doesn't make sense to me, since it seens that one value that would end up being set to 0 (currentMovement.y) was replaced by the integer 0 itself...
I'm going to paste my code below:
public float movSpeed = 5;
public float rotateSpeed = 90;
public float jumpSpeed = 10;
public float gravity = 15;
public float moveSpeedSmooth = 0.3f;
public float rotateSpeedSmooth = 0.3f;
CharacterController controller;
Vector3 currentMovement;
Vector3 currentMovementV;
Transform cameraTransform;
float verticalSpeed;
public float currentForwardSpeed;
public float forwardSpeedV;
public float targetRotation;
public float currentRotation;
public float rotationV;
void Start()
{
controller = GetComponent<CharacterController>();
cameraTransform = Camera.main.transform;
}
void Update()
{
Vector3 movementInput = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
if (movementInput.magnitude > 1)
{
movementInput.Normalize();
}
Vector3 targetMovement = movementInput;
targetMovement = cameraTransform.TransformDirection(targetMovement);
targetMovement.y = 0;
targetMovement *= movementInput.magnitude;
currentMovement = Vector3.SmoothDamp(currentMovement, targetMovement * movSpeed, ref currentMovementV, moveSpeedSmooth);
transform.rotation = Quaternion.LookRotation(new Vector3(currentMovement.x, 0, currentMovement.z));
if (!controller.isGrounded)
{
verticalSpeed -= gravity * Time.deltaTime;
}
else
{
verticalSpeed = 0;
}
if (controller.isGrounded && Input.GetButtonDown("Jump"))
{
verticalSpeed = jumpSpeed;
}
currentMovement.y = verticalSpeed;
controller.Move(currentMovement * movSpeed * Time.deltaTime);
}
Your answer
Follow this Question
Related Questions
How to walk in the direction the player is looking at in the Vive headset 1 Answer
Character rotating to previous rotation 1 Answer
Issues with camera lookrotation - please help 1 Answer
Character rotation and move to mouse click point with speed 0 Answers
FPS Controller rotation,FPS Controller rotation problem 0 Answers