using UnityEngine;
using System.Collections;
public class SmoothFollow2 : MonoBehaviour {
public Transform car;
public float distance = 8.0f;
public float rayCastdistance = 1.0f;
public float height = 2.5f;
public float rotationDampening = 3.0f;
public float heightDampening = 2.0f;
public float zoomRatio = 20.0f;
public float defaultFOV = 60.0f;
private Vector3 rotationVector;
private LayerMask raycastLayers = -1;
public LayerMask ignoreLayers = -1;
private RaycastHit hit = new RaycastHit();
bool canMove;
// Use this for initialization
void Start ()
{
raycastLayers = ~ignoreLayers;
}
// Update is called once per frame
void LateUpdate ()
{
float wantedAngle = rotationVector.y;
float wantedHeight = car.position.y + height;
float myAngle = transform.eulerAngles.y;
float myHeight = transform.position.y;
myAngle = Mathf.LerpAngle(myAngle, wantedAngle, rotationDampening * Time.deltaTime);
myHeight = Mathf.Lerp(myHeight, wantedHeight, heightDampening * Time.deltaTime);
Quaternion currentRotation = Quaternion.Euler(0, myAngle, myAngle);
/* if (Physics.Raycast (transform.position, transform.eulerAngles, out hit, 2f, raycastLayers)) {
transform.position = car.position;
//transform.position = car.position;
transform.position -= currentRotation * Vector3.forward*distance;
gameObject.transform.position = new Vector3(transform.position.x-3, myHeight+4, transform.position.z);
transform.LookAt(car);
} else {
transform.position = car.position;
//transform.position = car.position;
transform.position -= currentRotation * Vector3.forward*distance;
gameObject.transform.position = new Vector3(transform.position.x, myHeight, transform.position.z);
transform.LookAt(car);
}*/
//car.position = hit.point + hit.normal;
Vector3 up = transform.TransformDirection(Vector3.up);
// RaycastHit hit;
Debug.DrawRay(transform.position, -up * 1, Color.green);
/*if (Physics.Raycast (transform.position, -up, out hit, rayCastdistance)) {
Debug.Log ("Hit");
if (hit.collider.gameObject.tag == "Maps") {
Debug.Log ("ma");
transform.position = car.position;
//transform.position = car.position;
transform.position -= currentRotation * Vector3.forward * distance;
gameObject.transform.position = new Vector3 (transform.position.x, myHeight+20*Time.smoothDeltaTime, transform.position.z);
transform.LookAt (car);
}
} else {*/
transform.position = car.position;
//transform.position = car.position;
transform.position -= currentRotation * Vector3.forward * distance;
gameObject.transform.position = new Vector3 (transform.position.x, myHeight, transform.position.z);
transform.LookAt (car);
// }
}
void FixedUpdate()
{
Vector3 localVelocity = car.InverseTransformDirection(car.GetComponent<Rigidbody>().velocity);
if(localVelocity.z < -1.0f)
{
rotationVector.y = car.eulerAngles.y + 180;
}
else
{
rotationVector.y = car.eulerAngles.y;
}
float acceleration = car.GetComponent<Rigidbody>().velocity.magnitude;
GetComponent<Camera>().fieldOfView = defaultFOV + acceleration*zoomRatio*Time.deltaTime;
}
}
using System.Collections;
public class SmoothFollow2 : MonoBehaviour {
public Transform car;
public float distance = 8.0f;
public float rayCastdistance = 1.0f;
public float height = 2.5f;
public float rotationDampening = 3.0f;
public float heightDampening = 2.0f;
public float zoomRatio = 20.0f;
public float defaultFOV = 60.0f;
private Vector3 rotationVector;
private LayerMask raycastLayers = -1;
public LayerMask ignoreLayers = -1;
private RaycastHit hit = new RaycastHit();
bool canMove;
// Use this for initialization
void Start ()
{
raycastLayers = ~ignoreLayers;
}
// Update is called once per frame
void LateUpdate ()
{
float wantedAngle = rotationVector.y;
float wantedHeight = car.position.y + height;
float myAngle = transform.eulerAngles.y;
float myHeight = transform.position.y;
myAngle = Mathf.LerpAngle(myAngle, wantedAngle, rotationDampening * Time.deltaTime);
myHeight = Mathf.Lerp(myHeight, wantedHeight, heightDampening * Time.deltaTime);
Quaternion currentRotation = Quaternion.Euler(0, myAngle, myAngle);
/* if (Physics.Raycast (transform.position, transform.eulerAngles, out hit, 2f, raycastLayers)) {
transform.position = car.position;
//transform.position = car.position;
transform.position -= currentRotation * Vector3.forward*distance;
gameObject.transform.position = new Vector3(transform.position.x-3, myHeight+4, transform.position.z);
transform.LookAt(car);
} else {
transform.position = car.position;
//transform.position = car.position;
transform.position -= currentRotation * Vector3.forward*distance;
gameObject.transform.position = new Vector3(transform.position.x, myHeight, transform.position.z);
transform.LookAt(car);
}*/
//car.position = hit.point + hit.normal;
Vector3 up = transform.TransformDirection(Vector3.up);
// RaycastHit hit;
Debug.DrawRay(transform.position, -up * 1, Color.green);
/*if (Physics.Raycast (transform.position, -up, out hit, rayCastdistance)) {
Debug.Log ("Hit");
if (hit.collider.gameObject.tag == "Maps") {
Debug.Log ("ma");
transform.position = car.position;
//transform.position = car.position;
transform.position -= currentRotation * Vector3.forward * distance;
gameObject.transform.position = new Vector3 (transform.position.x, myHeight+20*Time.smoothDeltaTime, transform.position.z);
transform.LookAt (car);
}
} else {*/
transform.position = car.position;
//transform.position = car.position;
transform.position -= currentRotation * Vector3.forward * distance;
gameObject.transform.position = new Vector3 (transform.position.x, myHeight, transform.position.z);
transform.LookAt (car);
// }
}
void FixedUpdate()
{
Vector3 localVelocity = car.InverseTransformDirection(car.GetComponent<Rigidbody>().velocity);
if(localVelocity.z < -1.0f)
{
rotationVector.y = car.eulerAngles.y + 180;
}
else
{
rotationVector.y = car.eulerAngles.y;
}
float acceleration = car.GetComponent<Rigidbody>().velocity.magnitude;
GetComponent<Camera>().fieldOfView = defaultFOV + acceleration*zoomRatio*Time.deltaTime;
}
}
No comments:
Post a Comment