Files
XRLib/Assets/Scripts/UVC/Object3d/InteractiveObject.cs
2025-06-27 17:50:23 +09:00

53 lines
2.3 KiB
C#

using System;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.EventSystems;
namespace UVC.Object3d
{
/// <summary>
/// Unity의 Event System을 사용하여 마우스/포인터 상호작용을 처리하는 3D 객체를 위한 기본 클래스입니다.
/// 이 클래스를 상속받는 객체는 클릭, 포인터 진입/이탈 이벤트를 수신할 수 있습니다.
/// </summary>
/// <remarks>
/// 이 컴포넌트가 올바르게 작동하려면 다음 조건이 충족되어야 합니다:
/// 1. 이 컴포넌트가 부착된 게임 오브젝트에 반드시 <see cref="Collider"/> 컴포넌트가 있어야 합니다.
/// 2. 씬에 <see cref="EventSystem"/>이 존재해야 합니다.
/// 3. 메인 카메라에 <see cref="PhysicsRaycaster"/> 컴포넌트가 부착되어 있어야 합니다.
/// </remarks>
[RequireComponent(typeof(Collider))]
public class InteractiveObject : MonoBehaviour, IPointerClickHandler, IPointerEnterHandler, IPointerExitHandler
{
public Action<PointerEventData> OnPointerClickHandler;
public Action<PointerEventData> OnPointerEnterHandler;
public Action<PointerEventData> OnPointerExitHandler;
/// <summary>
/// 포인터로 이 객체를 클릭했을 때 호출됩니다.
/// </summary>
/// <param name="eventData">클릭 이벤트와 관련된 데이터입니다.</param>
public virtual void OnPointerClick(PointerEventData eventData)
{
OnPointerClickHandler?.Invoke(eventData);
}
/// <summary>
/// 포인터가 이 객체 위로 들어왔을 때 호출됩니다. 하이라이트 효과 등에 사용할 수 있습니다.
/// </summary>
/// <param name="eventData">포인터 이벤트와 관련된 데이터입니다.</param>
public virtual void OnPointerEnter(PointerEventData eventData)
{
OnPointerEnterHandler?.Invoke(eventData);
}
/// <summary>
/// 포인터가 이 객체에서 벗어났을 때 호출됩니다.
/// </summary>
/// <param name="eventData">포인터 이벤트와 관련된 데이터입니다.</param>
public virtual void OnPointerExit(PointerEventData eventData)
{
OnPointerExitHandler?.Invoke(eventData);
}
}
}