如何让游戏玩法忽略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中的表现:

  1. 添加一个raycaster(只需点击一下),然后

  2. 做这个:

  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通过触摸技术的旅程非常吸引人:

  1. “早期团结”……非常容易。 完全没用。 根本没用。

  2. “当前的’新’统一’……工作得很漂亮。 非常简单,但难以以专业的方式使用。

  3. “即将来临的团结”……大约在2025年,他们将实际工作并且易于使用。 不要屏住呼吸。

(情况与Unity的UI系统没有什么不同。起初,UI系统是可笑的。现在,它很棒,但以专家的方式使用有点复杂。)


方便的相关提示!

记得! 当你有一个全屏隐形面板,其中包含一些按钮。 在全屏隐形面板上,您必须关闭光线投射! 这很容易忘记:

在此处输入图像描述