- Home /
Rigidbody Controller move forward in the direction of the camera
I'm trying to make my character move in such way that when I move my joystick in the upwards direction, the character should move forward in the direction the camera is facing, and not in character's own forward direction. I have created this script which is basically everything that you can see in this page: https://wiki.unity3d.com/index.php/RigidbodyFPSWalker with the small diference that i'm obtaining horizontal axis and vertical axis from joystick. However, as i mentioned, the player is moving in its own forward vector and not of camera's, how can i make this change? Thank you in advance
  using UnityEngine;
 
 [RequireComponent(typeof(Rigidbody))]
 [RequireComponent(typeof(CapsuleCollider))]
 
 public class PlayerControllerRigid : MonoBehaviour
 {
     public float speed = 10.0f;
     public float gravity = 10.0f;
     public float maxVelocityChange = 10.0f;
     public bool canJump = true;
     public float jumpHeight = 2.0f;
     private bool grounded = false;
     private new Rigidbody rigidbody;
     public Joystick joystick;
 
     void Awake()
     {
         rigidbody = GetComponent<Rigidbody>();
         rigidbody.freezeRotation = true;
         rigidbody.useGravity = false;
     }
 
     void FixedUpdate()
     {
         if (grounded)
         {
 
             float horizontal = joystick.Horizontal;
             float vertical = joystick.Vertical;
 
             // Calculate how fast we should be moving
             Vector3 targetVelocity = new Vector3(horizontal, 0, vertical);
             targetVelocity = transform.TransformDirection(targetVelocity);
             targetVelocity *= speed;
 
             // Apply a force that attempts to reach our target velocity
             Vector3 velocity = rigidbody.velocity;
             Vector3 velocityChange = (targetVelocity - velocity);
             velocityChange.x = Mathf.Clamp(velocityChange.x, -maxVelocityChange, maxVelocityChange);
             velocityChange.z = Mathf.Clamp(velocityChange.z, -maxVelocityChange, maxVelocityChange);
             velocityChange.y = 0;
             rigidbody.AddForce(velocityChange, ForceMode.VelocityChange);
 
             // Jump
             if (canJump && Input.GetButton("Jump"))
             {
                 rigidbody.velocity = new Vector3(velocity.x, CalculateJumpVerticalSpeed(), velocity.z);
             }
         }
 
         // We apply gravity manually for more tuning control
         rigidbody.AddForce(new Vector3(0, -gravity * rigidbody.mass, 0));
 
         grounded = false;
     }
 
     void OnCollisionStay()
     {
         grounded = true;
     }
 
     float CalculateJumpVerticalSpeed()
     {
         // From the jump height and gravity we deduce the upwards speed 
         // for the character to reach at the apex.
         return Mathf.Sqrt(2 * jumpHeight * gravity);
     }
 }
Your answer
 
 
             Follow this Question
Related Questions
Camera relative rigidbody third person player movement 1 Answer
How to rotate camera diagonally over players shoulder while still facing towards players direction 0 Answers
Rigidbody movement in direction of camera? 1 Answer
How do I make my cameras parent follow my player? 0 Answers
Camera is shaking. Unity 3D 0 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                