Events 如何检测Unity3D应用程序的状态--是否可见
是否有任何解决方案可以检测Unity3D游戏的可见性?特别是在切换到前台/后台时做一些特定的事情?单行为支持两个有用的挂钩: 将在玩家获得或失去焦点时调用 将在应用程序暂停或取消暂停时调用。请注意,只有当播放器设置中的“run in background”为false时,它才会暂停,并且大多数代码执行将停止,直到应用程序重新获得焦点 考虑到上述注意事项,我通常更喜欢使用OnApplicationFocus,但这两种方法都很有用,具体取决于您要做什么 就处理这些事件而言,您可以确保每个场景中的某些对象都在侦听这些事件。可以附加某种类型的在场景之间持续存在的单例对象,或者在每个场景中保留一个适当处理它们的对象 Unity的脚本参考提供了此示例。通过将此脚本附加到某个场景中的对象,它将在游戏失去焦点时抛出GUI消息:Events 如何检测Unity3D应用程序的状态--是否可见,events,unity3d,listener,visibility,Events,Unity3d,Listener,Visibility,是否有任何解决方案可以检测Unity3D游戏的可见性?特别是在切换到前台/后台时做一些特定的事情?单行为支持两个有用的挂钩: 将在玩家获得或失去焦点时调用 将在应用程序暂停或取消暂停时调用。请注意,只有当播放器设置中的“run in background”为false时,它才会暂停,并且大多数代码执行将停止,直到应用程序重新获得焦点 考虑到上述注意事项,我通常更喜欢使用OnApplicationFocus,但这两种方法都很有用,具体取决于您要做什么 就处理这些事件而言,您可以确保每个场景中的某些
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;
}
}