My character only moves up or down on the world axis, even when the camera moves around them to point in a different direction.
transform.TransformDirection should be fixing this right? Ln. 74
public float speed = 6.0f;
public float jumpSpeed = 8.0f;
public float gravity = 20.0f;
private Quaternion Rotation;
private Vector3 moveDirection;
private CharacterController controller;
void Awake()
{
controller = GetComponent<CharacterController>() as CharacterController;
TP_Camera.UseExistingOrCreateNewMainCamera ();
}
void Update()
{
RotateTowardsMoveDirection ();
ProcessMotion ();
}
void ProcessMotion()
{
if (controller.isGrounded)
{
moveDirection = new Vector3 (Input.GetAxis ("Horizontal"), 0, Input.GetAxis ("Vertical"));
moveDirection *= speed;
if (Input.GetButton ("Jump"))
moveDirection.y = jumpSpeed;
}
moveDirection.y -= gravity * Time.deltaTime;
controller.Move (moveDirection * Time.deltaTime);
}
public void RotateTowardsMoveDirection()
{
if (moveDirection.x != 0 || moveDirection.z != 0)
{
if (moveDirection.z > 0)
{
if (moveDirection.x > 0)
Rotation = Quaternion.Euler (0, Camera.main.transform.rotation.eulerAngles.y + 45, 0);
else if (moveDirection.x < 0)
Rotation = Quaternion.Euler (0, Camera.main.transform.rotation.eulerAngles.y + 305, 0);
else
Rotation = Quaternion.Euler (0, Camera.main.transform.rotation.eulerAngles.y, 0);
}
else if (moveDirection.z < 0)
{
if (moveDirection.x > 0)
Rotation = Quaternion.Euler (0, Camera.main.transform.rotation.eulerAngles.y + 135, 0);
else if (moveDirection.x < 0)
Rotation = Quaternion.Euler (0, Camera.main.transform.rotation.eulerAngles.y + 225, 0);
else
Rotation = Quaternion.Euler (0, Camera.main.transform.rotation.eulerAngles.y + 180, 0);
}
else
{
if (moveDirection.x > 0)
Rotation = Quaternion.Euler (0, Camera.main.transform.rotation.eulerAngles.y + 90, 0);
else if (moveDirection.x < 0)
Rotation = Quaternion.Euler (0, Camera.main.transform.rotation.eulerAngles.y + 270, 0);
else
Rotation = transform.rotation;
}
}
transform.rotation = Quaternion.Lerp (transform.rotation, Rotation, 0.25f);
moveDirection = transform.TransformDirection (moveDirection);
if (moveDirection.magnitude > 1)
moveDirection = Vector3.Normalize (moveDirection);
}
}