using UnityEngine; namespace Colosseum.Player { /// /// 지면 타겟팅 인디케이터. /// 마우스 커서 위치의 지면에 표시되는 반투명 범위 원입니다. /// public class GroundTargetIndicator : MonoBehaviour { [Header("설정")] [Min(0.1f)] [SerializeField] private float radius = 5f; [SerializeField] private Color indicatorColor = new Color(1f, 0.5f, 0f, 0.35f); private GameObject indicatorObject; private Material indicatorMaterial; private void Awake() { CreateIndicator(); Hide(); } private void CreateIndicator() { // 얇은 실린더로 범위 원 생성 indicatorObject = GameObject.CreatePrimitive(PrimitiveType.Cylinder); indicatorObject.name = "GroundTargetIndicator"; indicatorObject.transform.SetParent(transform); indicatorObject.transform.localScale = new Vector3(radius * 2f, 0.02f, radius * 2f); // Default 레이어(0) — 지면 레이캐스트에 걸리지 않도록 Ground 레이어와 분리 indicatorObject.layer = 0; // 콜라이더 제거 — 물리 간섭 방지 Destroy(indicatorObject.GetComponent()); // 반투명 Unlit 머티리얼 indicatorMaterial = new Material(Shader.Find("Unlit/Transparent")); indicatorMaterial.color = indicatorColor; indicatorObject.GetComponent().material = indicatorMaterial; } /// /// 인디케이터를 표시합니다. /// public void Show() { if (indicatorObject != null) indicatorObject.SetActive(true); } /// /// 인디케이터를 숨깁니다. /// public void Hide() { if (indicatorObject != null) indicatorObject.SetActive(false); } /// /// 인디케이터 위치를 갱신합니다. /// public void UpdatePosition(Vector3 groundPosition) { if (indicatorObject != null) indicatorObject.transform.position = groundPosition + Vector3.up * 0.05f; } /// /// 인디케이터 반경을 변경합니다. /// public void SetRadius(float newRadius) { radius = newRadius; if (indicatorObject != null) indicatorObject.transform.localScale = new Vector3(radius * 2f, 0.02f, radius * 2f); } private void OnDestroy() { if (indicatorMaterial != null) Destroy(indicatorMaterial); } } }