CapersProject/Assets/02.Scripts/BlueWater/CharacterHighlighting.cs
2025-02-10 11:13:46 +09:00

59 lines
1.9 KiB
C#

using System.Collections.Generic;
using UnityEngine;
namespace DDD
{
public class CharacterHighlighting : MonoBehaviour
{
[SerializeField]
private LayerMask _obstacleLayer;
[SerializeField, Range(1, 16)]
private int _maxHitCount = 8;
private Camera _mainCamera;
private RaycastHit[] _raycastHits;
private List<FadeableObject> _currentFadeables;
private List<FadeableObject> _previousFadeables;
private void Start()
{
_mainCamera = Camera.main;
_raycastHits = new RaycastHit[_maxHitCount];
_currentFadeables = new List<FadeableObject>(_maxHitCount);
_previousFadeables = new List<FadeableObject>(_maxHitCount);
}
private void Update()
{
_currentFadeables.Clear();
var cameraPosition = _mainCamera.transform.position;
var direction = transform.position - cameraPosition;
var distance = direction.magnitude;
var size = Physics.RaycastNonAlloc(cameraPosition, direction, _raycastHits, distance,
_obstacleLayer, QueryTriggerInteraction.Collide);
for (var i = 0; i < size; i++)
{
var hitObject = _raycastHits[i].collider.GetComponentInChildren<FadeableObject>();
if (!hitObject || _currentFadeables.Contains(hitObject)) continue;
if (hitObject.IsFadeable)
{
hitObject.SetTransparent();
_currentFadeables.Add(hitObject);
}
}
foreach (var element in _previousFadeables)
{
if (_currentFadeables.Contains(element)) continue;
element.RestoreOriginal();
}
(_previousFadeables, _currentFadeables) = (_currentFadeables, _previousFadeables);
}
}
}