using UnityEngine;
using System.Collections;
public class carCamera : MonoBehaviour
{
bool canMove;
public Transform target;
public float height = 3f;
public float positionDamping = 3f;
public float velocityDamping = 3;
public float distance = 50f;
public LayerMask ignoreLayers = -1;
private RaycastHit hit = new RaycastHit();
private Vector3 prevVelocity = Vector3.zero;
private LayerMask raycastLayers = -1;
private Vector3 currentVelocity = Vector3.zero;
void Start(){
raycastLayers = ~ignoreLayers;
}
void FixedUpdate()
{
currentVelocity = Vector3.Lerp(prevVelocity, target.root.GetComponent<Rigidbody>().velocity, velocityDamping * Time.deltaTime);
currentVelocity.y = 0;
prevVelocity = currentVelocity;
}
void LateUpdate()
{
float speedFactor = Mathf.Clamp01(target.root.GetComponent<Rigidbody>().velocity.magnitude / 170.0f);
GetComponent<Camera>().fieldOfView = Mathf.Lerp(55, 72, speedFactor);
float currentDistance = Mathf.Lerp(10.0f, 10.0f, speedFactor);
currentVelocity = currentVelocity.normalized;
Vector3 newTargetPosition = target.position + Vector3.up * height;
Vector3 newPosition = newTargetPosition - (currentVelocity * currentDistance);
newPosition.y = newTargetPosition.y;
Vector3 targetDirection = newPosition - newTargetPosition;
if(Physics.Raycast(newTargetPosition, targetDirection, out hit, currentDistance, raycastLayers))
newPosition = 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, 1f))
{
if(hit.collider.gameObject.tag == "Maps")
{
canMove = false;
}
}
//Add something like 'bool canMove' to your script and add this if statement before you assign your new position
if (canMove)
transform.position = newPosition;
transform.position = new Vector3(transform.position.x, 7f, transform.position.z); //added c codr that worked
transform.position = newPosition;
transform.LookAt (newTargetPosition);
}
}
using System.Collections;
public class carCamera : MonoBehaviour
{
bool canMove;
public Transform target;
public float height = 3f;
public float positionDamping = 3f;
public float velocityDamping = 3;
public float distance = 50f;
public LayerMask ignoreLayers = -1;
private RaycastHit hit = new RaycastHit();
private Vector3 prevVelocity = Vector3.zero;
private LayerMask raycastLayers = -1;
private Vector3 currentVelocity = Vector3.zero;
void Start(){
raycastLayers = ~ignoreLayers;
}
void FixedUpdate()
{
currentVelocity = Vector3.Lerp(prevVelocity, target.root.GetComponent<Rigidbody>().velocity, velocityDamping * Time.deltaTime);
currentVelocity.y = 0;
prevVelocity = currentVelocity;
}
void LateUpdate()
{
float speedFactor = Mathf.Clamp01(target.root.GetComponent<Rigidbody>().velocity.magnitude / 170.0f);
GetComponent<Camera>().fieldOfView = Mathf.Lerp(55, 72, speedFactor);
float currentDistance = Mathf.Lerp(10.0f, 10.0f, speedFactor);
currentVelocity = currentVelocity.normalized;
Vector3 newTargetPosition = target.position + Vector3.up * height;
Vector3 newPosition = newTargetPosition - (currentVelocity * currentDistance);
newPosition.y = newTargetPosition.y;
Vector3 targetDirection = newPosition - newTargetPosition;
if(Physics.Raycast(newTargetPosition, targetDirection, out hit, currentDistance, raycastLayers))
newPosition = 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, 1f))
{
if(hit.collider.gameObject.tag == "Maps")
{
canMove = false;
}
}
//Add something like 'bool canMove' to your script and add this if statement before you assign your new position
if (canMove)
transform.position = newPosition;
transform.position = new Vector3(transform.position.x, 7f, transform.position.z); //added c codr that worked
transform.position = newPosition;
transform.LookAt (newTargetPosition);
}
}
No comments:
Post a Comment