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

时间:2013-12-11 19:37:07

标签: events unity3d listener visibility

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

2 个答案:

答案 0 :(得分:5)

MonoBehaviours支持两个有用的钩子:

OnApplicationFocus将在玩家获得或失去焦点的任何时候被召唤。

只要应用程序暂停或取消暂停,就会调用

OnApplicationPause。请注意,如果在播放器设置中“在后台运行”为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;
    }
}

答案 1 :(得分:1)

OnApplicationPause应该是您所需要的。

示例(直接从 Unity docs 提取以获取可读性):

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;
    }
}