Hide objects in front of player
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user