창 올라타기
This commit is contained in:
@@ -39,9 +39,12 @@ public class ClickThroughHitTest : MonoBehaviour
|
||||
[Header("검증용")]
|
||||
[SerializeField] bool showDebugHud = true;
|
||||
|
||||
[Tooltip("커서가 캐릭터 위에 있으면 살짝 커지게 해서 히트테스트를 눈으로 확인")]
|
||||
[Tooltip("커서가 캐릭터 위에 있을 때 미세하게 커지는 반응. 과하면 화면 제한 계산에도 영향을 준다")]
|
||||
[SerializeField] bool visualizeHover = true;
|
||||
[SerializeField] float hoverScale = 1.15f;
|
||||
|
||||
[Tooltip("호버 시 확대 배율. 1.03 정도가 자연스럽다. 값이 크면 드래그 시 화면 가장자리까지 못 간다")]
|
||||
[Range(1f, 1.2f)]
|
||||
[SerializeField] float hoverScale = 1.03f;
|
||||
|
||||
#pragma warning restore 0414
|
||||
|
||||
@@ -53,6 +56,15 @@ public class ClickThroughHitTest : MonoBehaviour
|
||||
/// <summary>현재 OS 커서가 캐릭터 위에 있는지.</summary>
|
||||
public bool IsOverCharacter { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// true 인 동안 커서 위치와 무관하게 클릭을 받는다.
|
||||
///
|
||||
/// 드래그 중에는 커서가 캐릭터를 벗어나기 마련인데, 그때 클릭 통과가 다시 켜지면
|
||||
/// 마우스 입력이 뒤 창으로 새면서 드래그가 끊긴다. 드래그 같은 연속 조작은
|
||||
/// 이 스위치로 히트테스트를 잠시 무력화한다.
|
||||
/// </summary>
|
||||
public bool ForceInteractive { get; set; }
|
||||
|
||||
int clickCount;
|
||||
uint currentExStyle;
|
||||
string lastAction = "-";
|
||||
@@ -83,8 +95,14 @@ void Update()
|
||||
PollNoActivateToggle();
|
||||
|
||||
IsOverCharacter = HitTest(out var hit);
|
||||
SetClickThrough(!IsOverCharacter);
|
||||
UpdateHoverVisual(IsOverCharacter ? hit.transform : null);
|
||||
SetClickThrough(!IsOverCharacter && !ForceInteractive);
|
||||
|
||||
// 드래그 중에는 커서가 캐릭터를 벗어나도 호버 표시를 유지한다.
|
||||
// 화면 끝까지 끌면 캐릭터는 제한에 걸려 멈추고 커서만 더 나가는데,
|
||||
// 그때 크기가 원래대로 돌아가면 손에서 놓친 것처럼 보인다.
|
||||
Transform hoverTarget = IsOverCharacter ? hit.transform
|
||||
: (ForceInteractive ? hovered : null);
|
||||
UpdateHoverVisual(hoverTarget);
|
||||
|
||||
var mouse = Mouse.current;
|
||||
if (IsOverCharacter && mouse != null && mouse.leftButton.wasPressedThisFrame)
|
||||
|
||||
Reference in New Issue
Block a user