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(); 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; } } } }