Oribtal Camera Movement with Rigidbody Movement
Hello im trying to setup my character with a rigidbody system, Currently this is the result https://www.youtube.com/watch?v=UkryTgdlmv4&feature=youtu.be
BackStory: Prior to setting up my rigidbody I was using the translate to move my character around, along with translate I have a orbital camera around my character that dictates the direction my character would move, So my Forward (W) would be based on the cameras Y Direction
RigidBodies: Now needing physics, im trying to get my movement to work using rigidbodies for a start I worked on my movement with rigidbodies
Vector3 playerMovement = new Vector3(Input.GetAxis("Horizontal"), 0.0f, Input.GetAxis("Vertical")) * speed;
rigidbody.MovePosition(transform.localPosition + playerMovement);
This works fine with the characters movement now being dictated by rigidbodies, however from the video above you can see that my rotation above has been lost, the camera no longer dictates what way "Forward" (W) is, to solve this I tried several things
First i tried to set my rigidbody.rotation = transform.rotation
Next I tried to do
Quaternion cam = Quaternion.Euler(0, Camera.transform.eulerAngles.y, 0); rigidbody.MoveRotation(cam);
Where I was grabbing the Cameras Y Rotation and Setting that value to the Rigidbodies Value, this did not change way forward is on the rigidbody
All im trying to do is set my rigidbody rotation to the rotation my Cameras rotationY and my Transform.rotation.y is at, sinc the rigidbody now dictates my movement, any help would be great
My Full Movement Code is Here
void Movement() {
if (!UI.activeSelf) {
//Sprint
float speed = walkSpeed;
if (anim.GetBool("IsSprinting")) {
speed = RunSpeed;
}
//Rotation Movement
Quaternion cam = Quaternion.Euler(0, Camera.transform.eulerAngles.y, 0);
rigidbody.rotation = cam;
//Movement WASD
Vector3 playerMovement = new Vector3(Input.GetAxis("Horizontal"), 0.0f, Input.GetAxis("Vertical")) * speed;
rigidbody.MovePosition(transform.localPosition + playerMovement);
//Rotation In place
if (playerMovement != Vector3.zero) {
transform.localRotation = Quaternion.Euler(transform.rotation.x, Camera.transform.eulerAngles.y, transform.rotation.z);
}
}
}
This is being ran in my FixedUpdate
Question: How to have my Forward(W) be ran based on rigidbodys Y Rotation
Ive been trying to fix this for a few days any help would be great
The Camera is A Orbital Camera
Your answer
Follow this Question
Related Questions
getting Jittery movement on camera when player rotating and moving in same time 0 Answers
When attaching my custom camera script camera shakes when player starts to move fast. 1 Answer
How to make one movement direction be equal to diferent cameras? 2 Answers
Rigidbody movement relative to third person camera 0 Answers
Help With Camera rotation on X and Y Axis (Target Focused) 1 Answer