CapersProject/Assets/02.Scripts/SeeThrough.cs
Nam Tae Gun 4313ee71ba 투명화 오브젝트 그림자 유지
+ Props 하위 오브젝트로 ShadowOnly 오브젝트 추가
+ Global 포스트 프로세싱, Player 전용 포스트 프로세싱 구별
2024-06-28 12:22:32 +09:00

58 lines
1.7 KiB
C#

using UnityEngine;
namespace BlueWater
{
public class SeeThrough : MonoBehaviour
{
[SerializeField]
private LayerMask _maskLayer;
[SerializeField]
private float _size = 0.5f;
private Camera _mainCamera;
private Renderer _previousRenderer;
// Hashes
private static readonly int _sizeHash = Shader.PropertyToID("_Size");
private void Start()
{
_mainCamera = CombatCameraManager.Instance.MainCamera;
}
private void Update()
{
if (!_mainCamera) return;
var direction = _mainCamera.transform.position - transform.position;
var ray = new Ray(transform.position, direction.normalized);
if (Physics.Raycast(ray, out var hit, 100f, _maskLayer))
{
var hitRenderer = hit.collider.GetComponentInChildren<Renderer>();
if (!hitRenderer) return;
if (!hitRenderer.material.HasProperty(_sizeHash)) return;
if (_previousRenderer && _previousRenderer != hitRenderer && _previousRenderer.material.HasProperty(_sizeHash))
{
_previousRenderer.material.SetFloat(_sizeHash, 0f);
}
hitRenderer.material.SetFloat(_sizeHash, _size);
_previousRenderer = hitRenderer;
}
else
{
if (!_previousRenderer) return;
if (_previousRenderer.material.HasProperty(_sizeHash))
{
_previousRenderer.material.SetFloat(_sizeHash, 0f);
}
_previousRenderer = null;
}
}
}
}