是否有任何解决方案可以检测Unity3D游戏的可见性?特别是当它切换到前景/背景时做一些特定的事情?
答案 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;
}
}