# Make Camera and Character Face Same Direction

So i have this code(i know its a lot).

``````var character : Transform;
var distance : float = 5.0; //How far away to orbit
var xSpeed : float = 50.0; //X sensitivity
var ySpeed : float = 50.0; //Y sensitivity

var resetTime : float = 1.0; //How long to take to reset

private var x : float = 0.0; //Y rotation
private var y : float = 0.0; //X rotation

private var rotation : Quaternion; //Current orientation

private var resetting : boolean = false; //resetting?
private var resetTimer : float = 0.0; //How long we've been resetting

var speed = 8;//8run 4 walk
var rotatespeed = 4;
var walkonoff : boolean = false;
var cameraDistanceMax: float = 10;
var cameraDistanceMin: float = 5;
var scrollSpeed: float = 1;

function LateUpdate() { //Every frame, do this as late as you can

if (character) {//There's a character
if(!resetting && Input.GetMouseButtonUp(0)) { //Released mouse button
resetting = true;
endX = x;
endY = y;
resetTimer = 0.0; //Reset the reset timer
}

if(!resetting) {
if (Input.GetMouseButtonDown(0)) { //Pushed mouse button
//Initialize the angles
var angles = transform.eulerAngles;
x = angles.y;
startX = x;
y = angles.x;
startY = y;
} //first time the button down

if(Input.GetMouseButton(0)) { //Mouse button is down
//Change the angles by the mouse movement
x += Input.GetAxis("Mouse X") * xSpeed * distance* 0.02;
y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;
Reorient();
} //button held down
} //Camera moving
else { //Reset
resetTimer += Time.deltaTime; //add to the timer;
var amountReset = resetTimer / resetTime; //How far we are

Reorient();
if(resetTimer >= resetTime) resetting = false;
} //Reset
character.forward = transform.forward;//make camera and character face forward
} //There's a character
} //LateUpdate

function Reorient() { //orient yourself
//Rotate the camera to those angles
rotation = Quaternion.Euler(y, x, 0);
transform.rotation = rotation;

//Move the camera to look at the character
transform.position = rotation * Vector3(0.0, 0.0, -distance)
+ character.position;

}

function Update(){

//zoom

distance += Input.GetAxis("Mouse ScrollWheel") * scrollSpeed;

// set camera position

//movment controls

//wasd
if (Input.GetKey ("w"))
character.Translate(Vector3.forward * speed * Time.deltaTime);
Translate(Vector3.forward * speed * Time.deltaTime);
if (Input.GetKey ("s"))
character.Translate(Vector3.back * speed * Time.deltaTime);
Translate(Vector3.back * speed * Time.deltaTime);
if (Input.GetKey ("q"))
character.Translate(Vector3.left * speed * Time.deltaTime);
Translate(Vector3.left * speed * Time.deltaTime);
if (Input.GetKey ("e"))
character.Translate(Vector3.right * speed * Time.deltaTime);
Translate(Vector3.forward * speed * Time.deltaTime);
if (Input.GetKey ("a"))
character.Rotate(0,-1 *rotatespeed,0);
character.Rotate(0,-1 *rotatespeed,0);
if (Input.GetKey ("d"))
character.Rotate(0,1*rotatespeed,0);
character.Rotate(0,1 *rotatespeed,0);

if(Input.GetKeyDown("/"))

if(walkonoff == true)
walkonoff = false;
else if (walkonoff == false)
walkonoff = true;

if(walkonoff == true){
speed=4;
rotatespeed = 2;
animation.play("Walk");
}

if(walkonoff == false){
speed=8;rotatespeed = 4;
animation.play("Run");
}
if (Input.GetKey("/")){

}

}
``````

But the problem is if i rotate the camera with the mouse the character does not move wiht it. How could i fix that.

Hello

There is an excellent tutorial on the third person character controller at 3DBuzz (http://www.3dbuzz.com/).

In the following method of the tutorial, I added a single line as indicated below:

``````Vector3 CalculatePosition(float rotationX, float rotationY, float distance)
{
Vector3 direction = new Vector3(0, 0, -distance);

rotationY = Character.transform.eulerAngles.y + rotationY;

Quaternion rotation = Quaternion.Euler(rotationX, rotationY, 0);
return TargetLookAt.position + rotation * direction;
}
``````

Where ever the characters faces, the camera looks in the same directionâ€¦

I recommend studying the tutorial at 3DBuzzâ€¦

I hope this helps.

CSDG