// 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");
}
}
// 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
}
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()
}
}
3条答案
按热度按时间omqzjyyz1#
您可以使用
EventSystem.current.IsPointerOverGameObject
添加一个检查,以确定触摸是否发生在UI上API的使用示例:
通过使用Linq
Where
,您可以将此条件用作过滤器,以便仅考虑未通过UI的触摸,例如:pinkon5k2#
这是给安卓的吧?〉
我建议使用unity内置的ui按钮来定义活动位置,我认为这应该自动适用于android。
或者U可以对触摸的位置作出IF语句,从而如果该位置低于或高于某个点,则它将不被激活。
fhity93d3#
我有一个函数来运行我的角色。但是我正在处理同样的问题。有一堆按钮必须被触摸计数忽略。
下面是我代码:
我有一个类来存储主面板,名为GameController。我添加了一个脚本(btnUI)到包含按钮的Main Panel。感谢Unity的UI系统,你可以控制你是否触摸面板上的按钮或空白点。
下面是代码.用IPointerDownHandler对点击情况进行设计即可.
在您的情况下,此代码可能无法正常工作,您可以按如下方式添加IPointerUpHandler:
我将代码更改为:
使用此代码,如果您点击按钮,主面板将保持活动状态,如果您点击任何空白点,主面板将停用,运行功能将执行
您可以在变量上使用参数,而不必检查面板是否处于活动状态。