using UnityEngine;
using UnityEngine.EventSystems;
namespace Gpm.Ui
{
///
/// UI 요소를 마우스 드래그로 이동할 수 있게 만드는 컴포넌트입니다.
/// 이 컴포넌트를 UI GameObject에 추가하면 해당 UI를 화면 내에서 자유롭게 움직일 수 있습니다.
///
///
/// 사용 방법:
///
/// 1. 움직이게 하고 싶은 UI GameObject(예: Image, Panel)를 선택합니다.
/// 2. 인스펙터 창에서 [AddChild Component] 버튼을 누르고 'DraggableRect'를 검색하여 추가합니다.
/// 3. 'Drag Rect Transform' 필드에 움직일 대상을 지정합니다. 비워두면 컴포넌트가 부착된 GameObject 자신이 움직입니다.
/// 4. 게임을 실행하고 UI를 마우스로 드래그하면 이동하는 것을 확인할 수 있습니다.
///
public class DraggableRect : DragaEventHandler
{
///
/// 드래그 시 실제로 위치가 변경될 UI의 RectTransform입니다.
/// 만약 비어있다면, 이 스크립트가 부착된 GameObject의 RectTransform이 기본값으로 사용됩니다.
///
public RectTransform dragRectTransform;
// 성능 최적화를 위해 Canvas 컴포넌트를 캐싱하는 변수입니다.
private Canvas m_Canvas;
///
/// 이 UI가 속해 있는 최상위 Canvas에 대한 참조입니다.
/// 드래그 이동량을 계산할 때 Canvas의 scaleFactor를 적용하여,
/// Canvas Scaler의 설정과 관계없이 일관된 속도로 움직이게 합니다.
///
public Canvas canvas
{
get
{
if(m_Canvas == null)
{
// 컴포넌트의 부모 계층에서 Canvas를 찾아서 할당합니다.
m_Canvas = GetComponentInParent