unity3d Unity Touch计数忽略Ui输入

nimxete2  于 2022-11-15  发布在  其他
关注(0)|答案(3)|浏览(165)

我有一个简单的游戏,当用户触摸屏幕,球员跳转。我已经实现了这一点使用touchCount为当touchCount =1,然后球员跳转。但问题是,有一个按钮在屏幕上,所以当用户按下一个按钮,touchCount是有效的,球员跳转。所以如何使球员跳转时,只有当用户触摸屏幕的非用户界面部分。提前感谢。

omqzjyyz

omqzjyyz1#

您可以使用EventSystem.current.IsPointerOverGameObject添加一个检查,以确定触摸是否发生在UI上
API的使用示例:

// Check if there is a touch
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)
{
    // Check if finger is over a UI element
    if (EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))
    {
        Debug.Log("Touched the UI");
    }
}

通过使用Linq Where,您可以将此条件用作过滤器,以便仅考虑未通过UI的触摸,例如:

// Get all touches that are NOT over UI
var validTouches = Input.touches.Where(touch => !EventSystem.current.IsPointerOverGameObject(touch.fingerId)).ToArray();

// This is basically a shortcut for writing something like
//var touchesList = new List<Touch>();
//foreach(var touch in Input.touches)
//{
//    if(!EventSystem.current.IsPointerOverGameObject(touch.fingerId))
//    {
//         touchesList.Add(touch);
//    } 
//}
//var validTouches = touchesList.ToArray();

if(validTouches.Length == 1)
{
    // Your jump here
}
pinkon5k

pinkon5k2#

这是给安卓的吧?〉
我建议使用unity内置的ui按钮来定义活动位置,我认为这应该自动适用于android。
或者U可以对触摸的位置作出IF语句,从而如果该位置低于或高于某个点,则它将不被激活。

fhity93d

fhity93d3#

我有一个函数来运行我的角色。但是我正在处理同样的问题。有一堆按钮必须被触摸计数忽略。
下面是我代码:

if (Input.touchCount > 0)
{
   run()
}

我有一个类来存储主面板,名为GameController。我添加了一个脚本(btnUI)到包含按钮的Main Panel。感谢Unity的UI系统,你可以控制你是否触摸面板上的按钮或空白点。
下面是代码.用IPointerDownHandler对点击情况进行设计即可.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class btnUI : MonoBehaviour, IPointerDownHandler
{
   public void OnPointerDown(PointerEventData eventData)
    {
        GameManager.mainPanel.SetActive(false);
    }
}

在您的情况下,此代码可能无法正常工作,您可以按如下方式添加IPointerUpHandler:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class btnUI : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
    public void OnPointerDown(PointerEventData eventData)
    {
        GameManager.mainPanel.SetActive(false);
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        GameManager.mainPanel.SetActive(true);
    }
}

我将代码更改为:

if(!GameManager.mainPanel.activeSelf)
{
    if (Input.touchCount > 0)
    {
        run()
    }
}

使用此代码,如果您点击按钮,主面板将保持活动状态,如果您点击任何空白点,主面板将停用,运行功能将执行
您可以在变量上使用参数,而不必检查面板是否处于活动状态。

相关问题