当我对覆盖整个屏幕的播放器控制器使用 Unity 的增强触摸功能时,如何使用按钮?

问题描述 投票:0回答:1

我想在我的游戏上创建一个暂停按钮,并且我有一个基于增强触摸的玩家控制器,无论我触摸哪里,我都会生成一个操纵杆,问题是我想检查我是否按下了统一的 UI 元素,例如按钮/滑块/dropdown 等,因此它不考虑输入特殊按钮。

有没有办法做到这一点或替代解决方法?谢谢你。

unity-game-engine
1个回答
0
投票

在 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 ... //
}
© www.soinside.com 2019 - 2024. All rights reserved.