46 lines
1.4 KiB
C#
46 lines
1.4 KiB
C#
using UnityEngine;
|
|
|
|
public class CameraPlayerFollow : MonoBehaviour
|
|
{
|
|
private Vector3 _cameraOffset;
|
|
|
|
private Transform _obstruction;
|
|
|
|
[SerializeField]
|
|
[Range(0.01f, 1.0f)]
|
|
private float _smoothFactor = 0.5f;
|
|
// Start is called before the first frame update
|
|
void Start()
|
|
{
|
|
_obstruction = null;
|
|
_cameraOffset = transform.position - Player.Instance.transform.position;
|
|
// .LookAt(_player);
|
|
}
|
|
|
|
void LateUpdate()
|
|
{
|
|
Vector3 newPosition = Player.Instance.transform.position + _cameraOffset;
|
|
|
|
transform.position = Vector3.Slerp(transform.position, newPosition, _smoothFactor);
|
|
ViewObstructed();
|
|
}
|
|
|
|
private void ViewObstructed()
|
|
{
|
|
RaycastHit hit;
|
|
if (Physics.Raycast(transform.position, Player.Instance.transform.position - transform.position, out hit, 3.5f))
|
|
{
|
|
if (hit.collider.gameObject.tag != "Player")
|
|
{
|
|
_obstruction = hit.transform;
|
|
_obstruction.gameObject.GetComponent<MeshRenderer>().shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.ShadowsOnly;
|
|
}
|
|
}
|
|
else if (_obstruction != null)
|
|
{
|
|
_obstruction.gameObject.GetComponent<MeshRenderer>().shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On;
|
|
_obstruction = null;
|
|
}
|
|
}
|
|
}
|