我想在我的游戏上创建一个暂停按钮,并且我有一个基于增强触摸的玩家控制器,无论我触摸哪里,我都会生成一个操纵杆,问题是我想检查我是否按下了统一的 UI 元素,例如按钮/滑块/dropdown 等,因此它不考虑输入特殊按钮。
有没有办法做到这一点或替代解决方法?谢谢你。
在 Canvas 游戏对象内,创建一个面板,该面板将成为可以生成浮动操纵杆的区域。在面板下方添加您的按钮。现在创建一个全局 TouchInputManager 组件/脚本,它将检测哪个 UI 元素被触摸。您可以将其附加到您的 Canvas GO。
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.InputSystem.EnhancedTouch;
using ETouch = UnityEngine.InputSystem.EnhancedTouch;
public class TouchInputManager : MonoBehaviour
{
private GraphicRaycaster graphicRaycaster;
private PointerEventData pointerEvtData = new(null);
private List<RaycastResult> raycastResults = new();
private void Awake()
{
graphicRaycaster = GetComponent<GraphicRaycaster>();
}
private void HandleFingerDown(Finger finger)
{
pointerEvtData.position = finger.screenPosition;
raycastResults.Clear();
// Perform a raycast to find the UI element touched by the finger
graphicRaycaster.Raycast(pointerEvtData, raycastResults);
if (raycastResults.Count > 0)
{
var gameObj = raycastResults[0].gameObject;
// Notify the UI element about the touch
gameObj.SendMessage("OnFingerDown", finger, SendMessageOptions.DontRequireReceiver);
}
}
private void OnEnable()
{
EnhancedTouchSupport.Enable();
ETouch.Touch.onFingerDown += HandleFingerDown;
ETouch.Touch.onFingerUp += HandleFingerUp;
ETouch.Touch.onFingerMove += HandleFingerMove;
}
private void OnDisable()
{
EnhancedTouchSupport.Disable();
ETouch.Touch.onFingerDown -= HandleFingerDown;
ETouch.Touch.onFingerUp -= HandleFingerUp;
ETouch.Touch.onFingerMove -= HandleFingerMove;
}
// Other methods ... //
}