mouse event 처리 중

This commit is contained in:
logonkhi
2025-06-23 20:06:15 +09:00
parent f79372b4de
commit d8e753c1a1
68 changed files with 2676 additions and 272 deletions

View File

@@ -63,6 +63,7 @@ namespace UVC.UI.Tooltip
private Coroutine _showTooltipCoroutine; // 툴팁 표시 지연을 위한 코루틴 참조
private const float TooltipDelay = 0.5f; // 툴팁 표시까지의 지연 시간 (초 단위)
private const float MouseMoveThreshold = 5f; // 마우스 이동 감지 임계값 (픽셀 단위)
/// <summary>
/// 마우스 포인터가 이 UI 요소의 영역 안으로 들어왔을 때 호출됩니다. (IPointerEnterHandler 인터페이스 구현)
@@ -90,12 +91,36 @@ namespace UVC.UI.Tooltip
/// 지정된 시간(TooltipDelay)만큼 대기한 후, OnPointerEnterAction을 호출하여 툴팁 표시를 요청하는 코루틴입니다.
/// </summary>
/// <param name="tooltip">표시할 툴팁 내용 또는 다국어 키입니다.</param>
/// <param name="mousePosition">현재 마우스 포인터의 화면 좌표입니다.</param>
private IEnumerator ShowTooltipAfterDelayCoroutine(string tooltip, Vector3 mousePosition)
/// <param name="initialMousePosition">현재 마우스 포인터의 화면 좌표입니다.</param>
private IEnumerator ShowTooltipAfterDelayCoroutine(string tooltip, Vector3 initialMousePosition)
{
yield return new WaitForSeconds(TooltipDelay); // 지정된 시간만큼 대기
float stillTime = 0f; // 마우스가 움직이지 않은 시간
Vector3 lastMousePosition = initialMousePosition;
while (stillTime < TooltipDelay)
{
// 현재 마우스 위치와 마지막 기록된 위치 간의 거리 계산
float distance = Vector3.Distance(Input.mousePosition, lastMousePosition);
// 거리가 임계값을 초과하면 마우스가 움직인 것으로 간주
if (distance > MouseMoveThreshold)
{
// 마우스가 움직였으므로 정지 시간을 리셋
stillTime = 0f;
lastMousePosition = Input.mousePosition;
}
else
{
// 마우스가 거의 움직이지 않으면 정지 시간 증가
stillTime += Time.unscaledDeltaTime;
}
yield return null; // 다음 프레임까지 대기
}
// TooltipDelay 시간 동안 마우스가 거의 움직이지 않았으면 툴팁 표시
_showTooltipCoroutine = null; // 코루틴 완료 후 참조 null 처리
OnPointerEnterAction?.Invoke(tooltip, mousePosition); // 연결된 액션 호출 (TooltipManager.HandlePointerEnter)
OnPointerEnterAction?.Invoke(tooltip, Input.mousePosition); // 현재 마우스 위치 사용
}
/// <summary>