Hide objects in front of player

This commit is contained in:
Vladimir Koshevarov
2022-11-17 19:20:24 +02:00
parent ed1c16db33
commit be23c9fa96
4 changed files with 183 additions and 102 deletions
+26 -4
View File
@@ -3,24 +3,46 @@ using UnityEngine;
public class CameraPlayerFollow : MonoBehaviour
{
[SerializeField]
private Transform _playerTransform;
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()
{
_cameraOffset = transform.position - _playerTransform.position;
transform.LookAt(_playerTransform);
_obstruction = null;
_cameraOffset = transform.position - _player.position;
transform.LookAt(_player);
}
void LateUpdate()
{
Vector3 newPosition = _playerTransform.position + _cameraOffset;
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, 1.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;
}
}
}