chunk 1: core gameplay scripts scenes runtime assets
This commit is contained in:
93
Assets/Scripts/Debug/UIRaycastInspector.cs
Normal file
93
Assets/Scripts/Debug/UIRaycastInspector.cs
Normal file
@@ -0,0 +1,93 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.InputSystem;
|
||||
using UnityEngine.InputSystem.EnhancedTouch;
|
||||
using EnhancedTouchSupport = UnityEngine.InputSystem.EnhancedTouch.EnhancedTouchSupport;
|
||||
using EnhancedTouchTouch = UnityEngine.InputSystem.EnhancedTouch.Touch;
|
||||
using EnhancedTouchPhase = UnityEngine.InputSystem.TouchPhase;
|
||||
|
||||
// Attach this to any active GameObject in the scene to log what UI elements
|
||||
// are hit when you click/tap. Helps diagnose why a button isn't firing.
|
||||
public class UIRaycastInspector : MonoBehaviour
|
||||
{
|
||||
private PointerEventData _eventData;
|
||||
private List<RaycastResult> _results = new List<RaycastResult>();
|
||||
|
||||
void Awake()
|
||||
{
|
||||
if (!EventSystem.current)
|
||||
{
|
||||
Debug.LogWarning("[UIRaycastInspector] No EventSystem present.");
|
||||
}
|
||||
}
|
||||
|
||||
void OnEnable()
|
||||
{
|
||||
// Ensure EnhancedTouch is active so we can read Touch.activeTouches.
|
||||
EnhancedTouchSupport.Enable();
|
||||
}
|
||||
|
||||
void OnDisable()
|
||||
{
|
||||
EnhancedTouchSupport.Disable();
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
// Prefer the Input System mouse/touch events if available.
|
||||
if (Mouse.current != null && Mouse.current.leftButton.wasPressedThisFrame)
|
||||
{
|
||||
DiagnosePointer(Mouse.current.position.ReadValue(), "MouseDown");
|
||||
}
|
||||
|
||||
if (EnhancedTouchSupport.enabled && EnhancedTouchTouch.activeTouches.Count > 0)
|
||||
{
|
||||
var touches = EnhancedTouchTouch.activeTouches;
|
||||
for (int i = 0; i < touches.Count; ++i)
|
||||
{
|
||||
var t = touches[i];
|
||||
if (!t.valid)
|
||||
continue;
|
||||
|
||||
if (t.phase == EnhancedTouchPhase.Began)
|
||||
{
|
||||
DiagnosePointer(t.screenPosition, "TouchBegan");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Legacy fallback for platforms not using the Input System yet.
|
||||
if (Input.touchCount > 0 && Input.touches[0].phase == UnityEngine.TouchPhase.Began)
|
||||
{
|
||||
DiagnosePointer(Input.touches[0].position, "TouchBegan");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void DiagnosePointer(Vector2 screenPos, string source)
|
||||
{
|
||||
if (!EventSystem.current) return;
|
||||
_results.Clear();
|
||||
_eventData = new PointerEventData(EventSystem.current) { position = screenPos };
|
||||
EventSystem.current.RaycastAll(_eventData, _results);
|
||||
|
||||
if (_results.Count == 0)
|
||||
{
|
||||
Debug.Log($"[UIRaycastInspector] {source} at {screenPos} hit NOTHING (no UI)." );
|
||||
return;
|
||||
}
|
||||
|
||||
System.Text.StringBuilder sb = new System.Text.StringBuilder();
|
||||
sb.Append($"[UIRaycastInspector] {source} at {screenPos} hits (top->bottom): ");
|
||||
for (int i = 0; i < _results.Count; i++)
|
||||
{
|
||||
var r = _results[i];
|
||||
sb.Append(r.gameObject.name);
|
||||
if (i < _results.Count - 1) sb.Append(" -> ");
|
||||
}
|
||||
Debug.Log(sb.ToString());
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/Debug/UIRaycastInspector.cs.meta
Normal file
2
Assets/Scripts/Debug/UIRaycastInspector.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2ec8123ca0495437bad53b1bb3df3687
|
||||
Reference in New Issue
Block a user