- Home /
Camera relative movement
Hello! i made a script that makes my character move relative to the camera, it works great, but i have a seriuos problem, when i try to make my character to look at the direction he's moving my character moves completly different.
This is the script.
#pragma strict
var dir: Vector3;
var direction: Vector3;
var speed : float = 2.0;
var gravity : float = 30.0;
var vertical :Vector3;
var horizontal:Vector3;
var total: Vector3;
private var moveDirection : Vector3 = Vector3.zero;
function Start () {
}
function Update () {
var cam : Transform = Camera.main.transform;
var controller : CharacterController = GetComponent(CharacterController);
var cameraRight : Vector3 = cam.TransformDirection (1, 0, 0);
var cameraFord : Vector3=cam.TransformDirection(0,0,1);
vertical = cameraFord* Input.GetAxis("vertical");
horizontal = cameraRight* Input.GetAxis("horizontal");
if(Input.GetAxis("vertical")!=0 || Input.GetAxis("vertical")!=0)
{animation.Play("walk");}
total = vertical + horizontal;
moveDirection = total*0.5;
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
//transform.Translate(total*Time.deltaTime,Space.World);
transform.localRotation = Quaternion.LookRotation(total);
moveDirection.y -= gravity * Time.deltaTime*5;
controller.Move(moveDirection * Time.deltaTime);
}
And the line transform.Translate moves my character exactly as i want, even if the character rotates, and i asume it's because it moves the character in world coordinates thanks to Space.World, but i can't use that line since i does not work with the character controller or rigid body and the character wont collide.
And when i use transform.TransformDirection the movement is affected by the rotation,
So the question is, how can i make my character move as transform.Translate in world coordinates but using the character controller so it can collide?
or how can i make that transform.TransformDirection is not affected by the rotation of the character?
Please, any help would be appreciated.