CapersProject/Assets/02.Scripts/CharacterHighlighting.cs
Nam Tae Gun 451ee36fdb #12 카메라 앞의 물체 가리기 기능 추가
+ CharacterHighlighting (캐릭터 오브젝트에 부착)
+ FadeableObject (투명화 시킬 오브젝트에 부착)따로 투명화 시킬 오브젝트에 bool값 true로 변경
+ BasePropsOpaqueLit.prefab, BaseFurnitureOpaqueLit.prefab의 visualLook 추가
2024-06-13 18:49:37 +09:00

59 lines
1.9 KiB
C#

using System.Collections.Generic;
using UnityEngine;
namespace BlueWater
{
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);
}
}
}