Skip to content

Instantly share code, notes, and snippets.

@LucienLee
Created December 8, 2014 00:27
Show Gist options
  • Save LucienLee/573e19d5ca00b13a6d45 to your computer and use it in GitHub Desktop.
Save LucienLee/573e19d5ca00b13a6d45 to your computer and use it in GitHub Desktop.
using UnityEngine;
using System.Collections;
public class ThirdPersonController : MonoBehaviour {
public GameObject player;
public GameObject mainCamera;
public GameObject cameraCollisionBox;
public CollisionCounter cameraProbe;
public float Maxdistance;
public float moveSpeed;
public float verticalRatio;
void CalculateHeight(){
Vector3 originVector = mainCamera.transform.position;
Vector3 localVector = mainCamera.transform.localPosition;
// REMOVE Y to caculate XZ magnitude
originVector.y = player.transform.position.y;
float y = Maxdistance - (originVector - player.transform.position).magnitude;
localVector.y=y;
mainCamera.transform.localPosition = localVector*verticalRatio;
}
// Update is called once per frame
void Update () {
// GET INPUT AXIS
float vertical = Input.GetAxis ("Vertical");
float horizontal = Input.GetAxis ("Horizontal");
// GET DIRECTION
Vector3 forward = mainCamera.transform.forward;
//Calibrate Y AXIS
forward.y = 0;
// GET DIRECTION UNIT VECTOR
forward.Normalize ();
Vector3 distance = (mainCamera.transform.position - player.transform.position);
distance.y = 0;
if (vertical > 0) {
player.rigidbody.velocity = forward * moveSpeed;
//Camera chases the player
if (distance.magnitude > Maxdistance) {
float originY = cameraCollisionBox.transform.position.y;
Vector3 newPosition = player.transform.position + distance.normalized * Maxdistance;
newPosition.y = originY;
cameraCollisionBox.transform.position = newPosition;
}
CalculateHeight();
} else if (vertical < 0) {
player.rigidbody.velocity = -forward * moveSpeed;
if( cameraProbe.counter == 0 ){
//Camera chases the player
float originY = cameraCollisionBox.transform.position.y;
Vector3 newPosition = player.transform.position + distance.normalized * Maxdistance;
newPosition.y = originY;
cameraCollisionBox.transform.position = newPosition;
}else{
CalculateHeight();
}
}else{
player.rigidbody.velocity = Vector3.zero;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment