using UnityEngine; public class CameraPlayerFollow : MonoBehaviour { [SerializeField] private Transform _player; 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.position; // .LookAt(_player); } void LateUpdate() { Vector3 newPosition = _player.position + _cameraOffset; transform.position = Vector3.Slerp(transform.position, newPosition, _smoothFactor); ViewObstructed(); } private void ViewObstructed() { RaycastHit hit; if (Physics.Raycast(transform.position, _player.position - transform.position, out hit, 3.5f)) { if (hit.collider.gameObject.tag != "Player") { _obstruction = hit.transform; _obstruction.gameObject.GetComponent().shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.ShadowsOnly; } } else if (_obstruction != null) { _obstruction.gameObject.GetComponent().shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; _obstruction = null; } } }