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