如何让游戏玩法忽略Unity3D中UI按钮的点击?
我正在尝试创建一个3D点击以在Unity3D中移动游戏。
我添加了一个UI Button
(使用UnityEngine.UI
),我想最终点击以打开和关闭运行。
但是,单击Button
实际上似乎是点击进入场景(在我的情况下是NavMeshAgent
导航)并导致我的播放器移动到其他位置。
如何禁用光线投射以单击UI按钮或以某种方式让UI捕获自己的事件?
我一直在使用典型的Unity3D代码让用户进入游戏玩法等
if (Input.GetMouseButtonDown(0)) {
如果我尝试这种方法也一样
if( Input.touches.Length > 0 ) { if ( Input.touches[0].phase == TouchPhase.Began ) {
在iOS,Android和桌面上似乎就是这种情况。
这似乎是一个基本问题,点击UI( UnityEngine.UI.Button
等)似乎落入游戏玩法。
关于这个非常古老的问题:
作为一个历史性的问题:这里是粗略的准备好的快速修复,你曾经在Unity多年前使用它…
if (Input.GetMouseButtonDown(0)) { // doesn't really work... if (UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject()) return; Bingo(); }
实际上,几年来你不能再这样做了。
抛开历史性的快速修复……
以下是您今天在Unity中的表现:
-
添加一个raycaster(只需点击一下),然后
-
做这个:
–
using UnityEngine.EventSystems; public class Gameplay:MonoBehaviour, IPointerDownHandler { public void OnPointerDown(PointerEventData eventData) { Bingo(); } }
基本上 , 基本上 ,这就是它的全部内容。
很简单:这就是你在Unity中处理触摸的方式。 这里的所有都是它的。
添加一个raycaster,并拥有该代码。
它看起来很简单,而且很容易。 但是,做得好可能很复杂。
(脚注1 – 完整细节: Unity3D中OnPointerDown与OnBeginDrag的恐怖 )
(脚注2 – 由于历史原因:如果链接仍然有效,这里是关于如何在Unity中进行“新”触摸的原始着名video,从那时起: 链接 ,第3部分。)
Unity通过触摸技术的旅程非常吸引人:
-
“早期团结”……非常容易。 完全没用。 根本没用。
-
“当前的’新’统一’……工作得很漂亮。 非常简单,但难以以专业的方式使用。
-
“即将来临的团结”……大约在2025年,他们将实际工作并且易于使用。 不要屏住呼吸。
(情况与Unity的UI系统没有什么不同。起初,UI系统是可笑的。现在,它很棒,但以专家的方式使用有点复杂。)
方便的相关提示!
记得! 当你有一个全屏隐形面板,其中包含一些按钮。 在全屏隐形面板上,您必须关闭光线投射! 这很容易忘记: