I am very new to unity and my scripts are based on some scripts found on the web.
I want to make a first person view so the camera is attached to my rigidbodys head. Then i want to move my rigidbody based on keyboard input (wasd) and rotate it using the mouse movement.
Until now, i used the following code for moving my rigidbody:
void Update() { /* calculate rigidbody movement */ movement = new Vector3( Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical")).normalized; /* calculate mouse look to rotate the rigidbody*/ mouseDelta = new Vector2(Input.GetAxisRaw("Mouse X"), Input.GetAxisRaw("Mouse Y")); mouseDelta = Vector2.Scale(mouseDelta, new Vector2(sensitivity * smoothing, sensitivity * smoothing)); smoothV.x = Mathf.Lerp(smoothV.x, mouseDelta.x, 1f / smoothing); smoothV.y = Mathf.Lerp(smoothV.y, mouseDelta.y, 1f / smoothing); mouseLook += smoothV; } void FixedUpdate() { /* apply rigidbody movement from Update() */ transform.Translate( movement * moveSpeed * Time.deltaTime ); /* apply rigidbody rotation from Update() */ transform.localRotation = Quaternion.AngleAxis(mouseLook.x, transform.up); /* apply camera rotation from Update() */ Camera.main.transform.localRotation = Quaternion.AngleAxis(-mouseLook.y, Vector3.right); } I learned today that i dont have to move a rigidbody's transform but now i am totally confused and it seems i have to restart my whole (first!) project.
So when i use MovePosition and MoveRotation, how do i rotate it based on the camera perspective/mouse movement?
I think the movement Vector is ok so i can simply rewrite the FixedUpdate to something like
rigidbody.MovePosition(movement * speed * Time.deltaTime) but i am totally stuck on how to apply the camera rotation to my rigidbody to use it like
void FixedUpdate() { /* move the rigidbody */ rigidbody.MovePosition(movement * moveSpeed * Time.deltaTime); /* rotate the camera */ camera.transform.localRotation = Quaternion.AngleAxis(-mouseLook.y, Vector3.right); /* but how can i rotate the rigidbody based on the cameras rotation??? */ rigidbody.MoveRotation(?????); } I hope its clear what i want, thank you!
MoveRotation(), Something like thisMoveRotation(Quaternion.Euler(Camera.main.transform.localRotation.eulerAngles))\$\endgroup\$Camera.mainandGetComponent<Rigidbody>()each Fixed Update \$\endgroup\$