So ermitteln Sie den Status einer Unity3D-app — Sichtbar oder nicht
Gibt es eine Lösung, um erkennen Sie die Sichtbarkeit einer Unity3D-Spiel? vor allem einige bestimmte Sache, während es eingeschaltet, um das Vordergrund - /hintergrund?
MonoBehaviours Unterstützung zwei nützliche Haken:
OnApplicationFocus aufgerufen wird, jedes mal, wenn der player den Fokus erhält oder verliert.
OnApplicationPause aufgerufen wird jedes mal, wenn die Anwendung angehalten oder unpaused. Beachten Sie, dass es nur pausiert werden, wenn "im hintergrund laufen" ist falsch in der player-Einstellungen, und dass die meisten code-Ausführung wird aufhören, bis die app wieder aktiv.
Mit den oben genannten Einschränkungen im Hinterkopf, ich in der Regel lieber verwenden, OnApplicationFocus, aber beide können nützlich sein, je nachdem, was genau Sie zu tun versuchen.
Soweit Umgang mit diesen Ereignissen, Sie könnte sicherstellen, dass ein Objekt in jeder Szene ist das hören für Sie. Entweder befestigen Sie irgendeine Art von singleton-Objekt, dass weiterhin zwischen den Szenen, oder halten Sie ein Objekt pro Szene, verarbeitet Sie entsprechend.
Unity scripting Referenz bietet in diesem Beispiel. Durch das anbringen dieses Skript auf ein Objekt in einer bestimmten Szene, wird es werfen eine GUI-Nachricht, während das Spiel den Fokus verloren hat:
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;
}
}
OnApplicationFocus ist nicht sehr nützlich in den editor. Es wird nur ausgelöst, wenn die Spiel-Ansicht aktiviert ist oder deactived, nicht, wenn der editor-Prozess selbst aktiviert oder deaktiviert ist.
Wenn ich das Spiel testen das Verhalten, würde ich in der Regel nennen, die das gewünschte Verhalten... aber, wenn Sie sind in Erster Linie auf das schreiben von Skripts für den editor, kann ich sehen, wie das könnte ein problem sein. Gibt es eine bessere Haken zur Verwendung im editor Skripte?
Ich habe nicht einen gesehen, legte ich einen Fehler an der Einheit.
Beispiel (zog direkt aus Einheit docs zur besseren Lesbarkeit):
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;
}
}
MonoBehaviours Unterstützung zwei nützliche Haken:
OnApplicationFocus aufgerufen wird, jedes mal, wenn der player den Fokus erhält oder verliert.
OnApplicationPause aufgerufen wird jedes mal, wenn die Anwendung angehalten oder unpaused. Beachten Sie, dass es nur pausiert werden, wenn "im hintergrund laufen" ist falsch in der player-Einstellungen, und dass die meisten code-Ausführung wird aufhören, bis die app wieder aktiv.
Mit den oben genannten Einschränkungen im Hinterkopf, ich in der Regel lieber verwenden, OnApplicationFocus, aber beide können nützlich sein, je nachdem, was genau Sie zu tun versuchen.
Soweit Umgang mit diesen Ereignissen, Sie könnte sicherstellen, dass ein Objekt in jeder Szene ist das hören für Sie. Entweder befestigen Sie irgendeine Art von singleton-Objekt, dass weiterhin zwischen den Szenen, oder halten Sie ein Objekt pro Szene, verarbeitet Sie entsprechend.
Unity scripting Referenz bietet in diesem Beispiel. Durch das anbringen dieses Skript auf ein Objekt in einer bestimmten Szene, wird es werfen eine GUI-Nachricht, während das Spiel den Fokus verloren hat:
OnApplicationPause sollte sein, was Sie brauchen.
Beispiel (zog direkt aus Einheit docs zur besseren Lesbarkeit):