- Home /
Walk to camera direction
Hi, I am making a animated FPS controller. But when i turn the body of the character and then start to move it still goes towards the standard X and Z directions. so the problem is that when i turn the camera, the character turns with it but it still moves in the standard directions. Does anyone know any solutions? Thanks already.
This is my camera scirpt:
public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
public RotationAxes axes = RotationAxes.MouseXAndY;
public float sensitivityX = 15F;
public float sensitivityY = 15F;
public float minimumX = -360F;
public float maximumX = 360F;
public float minimumY = -60F;
public float maximumY = 60F;
float rotationX = 0F;
float rotationY = 0F;
Quaternion originalRotation;
void Update()
{
if (axes == RotationAxes.MouseXAndY)
{
// Read the mouse input axis
rotationX += Input.GetAxis("Mouse X") * sensitivityX;
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
rotationX = ClampAngle(rotationX, minimumX, maximumX);
rotationY = ClampAngle(rotationY, minimumY, maximumY);
Quaternion xQuaternion = Quaternion.AngleAxis(rotationX, Vector3.up);
Quaternion yQuaternion = Quaternion.AngleAxis(rotationY, -Vector3.right);
transform.localRotation = originalRotation * xQuaternion * yQuaternion;
}
else if (axes == RotationAxes.MouseX)
{
rotationX += Input.GetAxis("Mouse X") * sensitivityX;
rotationX = ClampAngle(rotationX, minimumX, maximumX);
Quaternion xQuaternion = Quaternion.AngleAxis(rotationX, Vector3.up);
transform.localRotation = originalRotation * xQuaternion;
}
else
{
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
rotationY = ClampAngle(rotationY, minimumY, maximumY);
Quaternion yQuaternion = Quaternion.AngleAxis(-rotationY, Vector3.right);
transform.localRotation = originalRotation * yQuaternion;
}
}
void Start()
{
// Make the rigid body not change rotation
if (GetComponent<Rigidbody>())
GetComponent<Rigidbody>().freezeRotation = true;
originalRotation = transform.localRotation;
}
public static float ClampAngle(float angle, float min, float max)
{
if (angle < -360F)
angle += 360F;
if (angle > 360F)
angle -= 360F;
return Mathf.Clamp(angle, min, max);
}
And this is my controller script:
public Animator anim;
public Rigidbody Rbody;
public float Gravity;
public float JumpHeight;
private float currentrunspeed = 80;
private bool run;
//public GameObject Camera;
public GameObject us;
private float inputH;
private float inputV;
private float inputJump;
// Use this for initialization
void Start ()
{
anim = GetComponent<Animator>();
Rbody = GetComponent<Rigidbody>();
run = false;
Cursor.lockState = CursorLockMode.Locked;
}
// Update is called once per frame
void Update ()
{
transform.localEulerAngles = new Vector3(transform.localEulerAngles.x, Camera.main.transform.localEulerAngles.y, transform.localEulerAngles.z);
Physics.gravity = new Vector3(0f, -Gravity * Time.fixedDeltaTime, 0f);
if (Input.GetKeyDown("1"))
{
anim.Play("Run", -1,0f);
}
if (Input.GetKey(KeyCode.LeftShift)&& inputV > 0.1)
{
currentrunspeed = 150f;
run = true;
}
else
{
run = false;
currentrunspeed = 80f;
}
inputH = Input.GetAxis("Horizontal");
inputV = Input.GetAxis("Vertical");
anim.SetFloat("InputH", inputH);
anim.SetFloat("InputV", inputV);
anim.SetBool("Run",run);
float moveX = inputH * 50f * Time.deltaTime;
float moveZ = inputV * currentrunspeed * Time.deltaTime;
Rbody.velocity = new Vector3(moveX,Rbody.velocity.y, moveZ);
if (Input.GetKeyDown("space") && IsGrounded)
{
Rbody.AddForce(Vector3.up * JumpHeight * Time.deltaTime);
anim.SetBool("Jump", true);
}
else
{
anim.SetBool("Jump", false);
}
}
public bool IsGrounded;
void OnCollisionStay(Collision collisionInfo)
{
IsGrounded = true;
}
void OnCollisionExit(Collision collisionInfo)
{
IsGrounded = false;
}
Comment
Your answer
Follow this Question
Related Questions
Player look in camera direction problem 1 Answer
How can I respawn my RigidBodyFPSController facing new direction? 0 Answers
Make the player go into the direction I am looking at 0 Answers
How to Get My Camera to Follow First Person POV in First Person Controller 1 Answer
First person controller movement direction incorrect 2 Answers