+ FlashAndShadowLit 쉐이더에 씨스루 기능 추가 + FlashAndShadowSeeThroughLit material을 보스 몬스터에게 적용 Closes #23
55 lines
1.7 KiB
C#
55 lines
1.7 KiB
C#
using UnityEngine;
|
|
|
|
namespace BlueWater
|
|
{
|
|
public class SeeThrough : MonoBehaviour
|
|
{
|
|
[SerializeField]
|
|
private LayerMask _maskLayer;
|
|
|
|
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, 0.5f);
|
|
_previousRenderer = hitRenderer;
|
|
}
|
|
else
|
|
{
|
|
if (!_previousRenderer) return;
|
|
|
|
if (_previousRenderer.material.HasProperty(_sizeHash))
|
|
{
|
|
_previousRenderer.material.SetFloat(_sizeHash, 0f);
|
|
}
|
|
_previousRenderer = null;
|
|
}
|
|
}
|
|
}
|
|
} |