53 lines
2.3 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|