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