Events 如何检测Unity3D应用程序的状态--是否可见

Events 如何检测Unity3D应用程序的状态--是否可见,events,unity3d,listener,visibility,Events,Unity3d,Listener,Visibility,是否有任何解决方案可以检测Unity3D游戏的可见性?特别是在切换到前台/后台时做一些特定的事情?单行为支持两个有用的挂钩: 将在玩家获得或失去焦点时调用 将在应用程序暂停或取消暂停时调用。请注意,只有当播放器设置中的“run in background”为false时,它才会暂停,并且大多数代码执行将停止,直到应用程序重新获得焦点 考虑到上述注意事项,我通常更喜欢使用OnApplicationFocus,但这两种方法都很有用,具体取决于您要做什么 就处理这些事件而言,您可以确保每个场景中的某些

是否有任何解决方案可以检测Unity3D游戏的可见性?特别是在切换到前台/后台时做一些特定的事情?

单行为支持两个有用的挂钩:

将在玩家获得或失去焦点时调用

将在应用程序暂停或取消暂停时调用。请注意,只有当播放器设置中的“run in background”为false时,它才会暂停,并且大多数代码执行将停止,直到应用程序重新获得焦点

考虑到上述注意事项,我通常更喜欢使用OnApplicationFocus,但这两种方法都很有用,具体取决于您要做什么

就处理这些事件而言,您可以确保每个场景中的某些对象都在侦听这些事件。可以附加某种类型的在场景之间持续存在的单例对象,或者在每个场景中保留一个适当处理它们的对象

Unity的脚本参考提供了此示例。通过将此脚本附加到某个场景中的对象,它将在游戏失去焦点时抛出GUI消息:

public class Example : MonoBehaviour {
    public bool paused;

    void OnGUI() {
        if (paused) {
            GUI.Label(new Rect(100, 100, 50, 30), "Game paused");
        }
    }

    void OnApplicationFocus(bool focusStatus) {
        paused = focusStatus;
    }
}
应该是你需要的

示例(为了可读性,直接从Unity文档中提取):


OnApplicationFocus在编辑器中不是很有用。它只在激活或取消激活游戏视图时激发,而不是在激活或取消激活编辑器进程本身时激发。@jjxtra当我测试游戏的行为时,我通常称之为所需的行为。。。但是如果您主要是为编辑器编写脚本,我可以看出这可能是一个问题。在编辑器脚本中有更好的钩子吗?我没有见过,我向Unity提交了一个bug。
using UnityEngine;
using System.Collections;

public class Example : MonoBehaviour {
    public bool paused;
    void OnGUI() {
        if (paused)
            GUI.Label(new Rect(100, 100, 50, 30), "Game paused");
        }
    void OnApplicationPause(bool pauseStatus) {
        paused = pauseStatus;
    }
}