CapersProject/Assets/02.Scripts/SeeThrough.cs
Nam Tae Gun 54582acbf4 Material 최적화 및 플레이어 이동 로직 수정 중
+ MaterialPropertyBlock 사용 금지 -> Material Instance 방식으로 변경 (MaterialPropertyBlock은 URP프로젝트 중 SRP Batcher를 사용하는 경우 비추천 방식)
+ 플레이어 이동 방식 velocity 형태로 변경 중
2024-07-01 04:05:24 +09:00

60 lines
1.9 KiB
C#

using BlueWater.Interfaces;
using UnityEngine;
namespace BlueWater
{
public class SeeThrough : MonoBehaviour
{
[SerializeField]
private LayerMask _maskLayer;
[SerializeField]
private float _size = 0.5f;
private Camera _mainCamera;
private Material _hitMaterialInstance;
private Material _previousMaterialInstance;
// 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))
{
_hitMaterialInstance = hit.collider.GetComponent<IMaterialInstance>()?.MaterialInstance;
if (!_hitMaterialInstance) return;
if (!_hitMaterialInstance.HasProperty(_sizeHash)) return;
if (_previousMaterialInstance && _previousMaterialInstance != _hitMaterialInstance && _previousMaterialInstance.HasProperty(_sizeHash))
{
_previousMaterialInstance.SetFloat(_sizeHash, 0f);
}
_hitMaterialInstance.SetFloat(_sizeHash, _size);
_previousMaterialInstance = _hitMaterialInstance;
}
else
{
if (!_previousMaterialInstance) return;
if (_previousMaterialInstance.HasProperty(_sizeHash))
{
_previousMaterialInstance.SetFloat(_sizeHash, 0f);
}
_previousMaterialInstance = null;
}
}
}
}