- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 UI Button
(使用 UnityEngine.UI
)。
但是,点击 Button
似乎是点击到场景中(在我的例子中点击导航网格)。
如何解决这个问题?
我一直在使用典型的 Unity3D 代码让用户进入游戏,例如
if (Input.GetMouseButtonDown(0))
{
如果我尝试这种方法也是一样
if( Input.touches.Length > 0 )
{
if ( Input.touches[0].phase == TouchPhase.Began )
{
在 iOS、Android 和桌面上似乎都是这种情况。
这似乎是一个基本问题,即点击 UI(UnityEngine.UI.Button
等)似乎会影响游戏玩法。
最佳答案
以下是您目前在 Unity 中的操作方式:
您自然会在层次结构中有一个 EventSystem
- 只需检查您是否有。 (例如,当您添加一个 Canvas 时,您会自动获得其中一个;通常,Unity 项目中的每个场景都有一个 EventSystem
,但只需检查您是否有一个。)
向相机添加一个物理光线转换器(只需单击一下)
这样做:
.
using UnityEngine.EventSystems;
public class Gameplay:MonoBehaviour, IPointerDownHandler {
public void OnPointerDown(PointerEventData eventData) {
Bingo();
}
}
基本上,再次基本上,仅此而已。
非常简单:这就是您在 Unity 中处理触摸的方式。仅此而已。
添加一个光线转换器,并获得该代码。
看起来很简单,其实很容易。然而,要做好可能很复杂。
(脚注:在 Unity 中进行拖动的一些恐怖行为:Horrors of OnPointerDown versus OnBeginDrag in Unity3D)
Unity 的触控技术之旅令人着迷:
“早期团结”......非常容易。毫无用处。根本没用。
“当前的‘新’Unity”……效果很好。非常简单,但很难以专家的方式使用。
“即将到来的 future Unity”……到 2025 年左右,他们将使其既实用又易于使用。不要屏住呼吸。
(这种情况与 Unity 的 UI 系统没什么不同。起初 UI 系统很可笑。现在,它很棒,但以专家的方式使用起来有点复杂。截至 2019 年,它们是即将再次彻底改变它。)
(网络是一样的。起初它完全是垃圾。"new"网络非常好,但有一些非常糟糕的选择。就在最近 2019 年,他们再次更改了网络。)
实用的相关提示!
记住!当您有一个包含一些按钮的全屏不可见 面板时。在全屏隐形面板上,您必须关闭 光线转换!很容易忘记:
作为一个历史事件:这是“忽略 UI”的粗略快速修复方法,多年前您曾经能够在 Unity 中使用...
if (Input.GetMouseButtonDown(0)) { // doesn't really work...
if (UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject())
return;
Bingo();
}
你不能再这样做了,几年了。
关于c# - 如何让游戏玩法忽略 Unity3D 中 UI 按钮的点击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37069584/
我是一名优秀的程序员,十分优秀!