- Home /
Simple Transform question, using Quaternion.LookRotation
Quaternion toRotation = Quaternion.LookRotation (transform.forward + new Vector3(Input.GetAxis("Horizontal"), 0f, 1f * (1f - Mathf.Abs(Input.GetAxis("Horizontal")))), transform.up + new Vector3(Input.GetAxis("Roll"),1f * (1f - Mathf.Abs(Input.GetAxis("Vertical"))), 0f));
First off, I know a lot of things in that code don't make any sense. That's why I'm here.
Okay. Say this is attached to a cube. Here's what happens:
You can pitch left and right with A and D. When you let go, it smooths back to looking forward.
You can roll left and right (As in, rotate around Z) with my axis "Roll" which is Q and E. This behavior of subtracting the absolute value of the input axis to return the rotation when releasing the keys is exactly what I want. For my scenario, it's even better that with this method, you can only turn 90 degrees with a full axis value.
HOWEVER! When you pitch all the way left or all the way right, rolling ceases to do anything.
I am having a hard time wrapping my head around how to apply the rotation in a way that allows the cube to change pitch, yaw, and roll, regardless of its current/relative orientation. I must not understand transform math completely yet, so please help!
This is all a part of me trying to find a way to make my camera, following my player, using LookRotation and Lerp, to turn in the direction of my players input, relative to the players transform. I.e.: A ship is flying forward. The camera is following already. The ship turns left (relative to itself), I want that input fed into the "transform.up, transform.forward" arguments of "LookRotation" so that they are only being especially modified when the keys are being pressed.
Here is where I left off on that, sorry for the context-less variables, but I will boil it down to show what I am trying to do:
Quaternion toRotation = Quaternion.LookRotation (camfollow.transform.forward + new Vector3(Input.GetAxis("Vertical"), 0f, 1f * (1f - Mathf.Abs(Input.GetAxis("Vertical")))), camfollow.transform.up);
cam.transform.rotation = Quaternion.Lerp (cam.transform.rotation, toRotation, (Time.fixedDeltaTime *2f));
"camfollow" is the target, where I want to the camera to point to.
Obviously I modified the transform incorrectly, but the current behavior there is that pressing the vertical axis (W and S) (which makes the player's ship pitch up and down) is rotating the camera left and right.
The desired behavior is that, when pressing in a direction, the camera gets its look-rotation variables modified to add to the direction it is looking in. And when releasing, those values mathematically being unmodified by keypress.
I also need this math to happen relative to the ship's orientation. Bear in mind "camfollow" is a child object of the ship ultimately.
Thank you for any and all help.
Your answer
Follow this Question
Related Questions
Rotate object without storing facing 1 Answer
Quaternion rotation issue 1 Answer
Quaternion rotation with normals bug: Only works into one direction? 1 Answer
Direction of rotation 0 Answers