2017-11-10 2 views
0

OnDisable und OnDestroy werden unter iOS nicht aufgerufen. Ich habe diese beiden Methoden in MonoBehaviour Objekt hinzugefügt, die zerstört werden, wenn das Spiel geschlossen wird.OnDisable und OnDestroy werden unter iOS nicht aufgerufen

Welche Daten auch immer ich zum Zeitpunkt des Spielabschlusses gespeichert habe, die beim Start des nächsten Spiels nicht verfügbar sind. Also, ich merke, dass diese beiden Methoden nicht funktionierten.

Irgendeine Lösung dafür?

void OnDisable() 
{ 
    Debug.Log("*************************** OnDisable"); 

    DataStorage.StoreLastOpenedDay(DateTime.Now.Day); 
    DataStorage.StoreLastOpenedMonth(DateTime.Now.Month); 
    DataStorage.StoreLastOpenedYear(DateTime.Now.Year); 
} 


void OnDestroy() 
{ 
    Debug.Log("*************************** OnDestroy"); 

    DataStorage.StoreLastOpenedDay(DateTime.Now.Day); 
    DataStorage.StoreLastOpenedMonth(DateTime.Now.Month); 
    DataStorage.StoreLastOpenedYear(DateTime.Now.Year); 
} 

Antwort

1

können Sie versuchen, OnApplicationQuit() anstelle von OnDestroy() und OnDisable() weil diese beiden Methoden werden nicht genannt wurden, wenn Sie Ihr Spiel zu schließen, nur, wenn Sie tatsächlich bekommen Sie zerstörten Objekt oder deaktiviert.

Wenn Sie jedoch OnApplicationQuit() verwenden möchten, sollten Sie sich an die spezielle Plattformeinstellung Exit on Suspend (bei Unity unter 2017) und Behaviour in Background (für Unity 2017.0 und neuer) erinnern. Standardmäßig ist diese Einstellung auf Suspend gesetzt, was bedeutet, dass Ihre Anwendung nicht zerstört wird, wenn Sie auf die Home-Taste klicken, sondern nur in den Hintergrund geht. Um diese Situation zu umgehen, sollten Sie OnApplicationPause() verwenden. Wenn Sie Destroy Verhalten wählen, wird Ihre App nach dem Klicken auf die Home-Taste zerstört und OnApplicationQuit() wird aufgerufen.

+0

Lesen Sie das Dokument über OnApplicationQuit. Sie müssen "Exit on Suspend" ankreuzen, damit das Spiel beendet und nicht angehalten wird, damit diese Funktion aufgerufen wird. Es sei denn, OP ist in Ordnung mit dem Beenden der App, anstatt zu suspendieren, sollte dies nicht verwendet werden. Ganz zu schweigen davon, dass es nicht mit Widows-Store-Apps funktioniert. – Programmer

+0

An welchem ​​Ort ist "Exit on Suspend" verfügbar? – Siddharth

+0

@Programmierer, es gibt kein Häkchen mehr "Exit On Suspend", in Unity 2017 wurde es in "Verhalten im Hintergrund" verschoben, welches ein Dropdown-Menü mit 3 Elementen ist - Suspend, Custom, Exit. Es befindet sich in den Player-Einstellungen unter der Kopfzeile Konfiguration. – vmchar

3

OnDisable und OnDestroy Funktionen aufgerufen werden, wenn das Skript zerstört wird. Sie sind nicht dazu bestimmt, angerufen zu werden, wenn Sie aus dem Spiel aussteigen. Wenn Sie das Spiel auf mobilen Geräten beenden, werden die Skripts normalerweise nicht zerstört. Das Spiel wird einfach pausiert. OnDisable und OnDestroy funktionieren möglicherweise auf einem Standalone-Build, wenn Sie die App beenden. Dies ist jedoch nicht der richtige Zweck und funktioniert daher möglicherweise nicht auf mobilen Geräten.

Die Funktionen OnApplicationPause und OnApplicationFocus werden verwendet, um zu erkennen, wann Sie die App verlassen und zu ihr zurückkehren. Verwenden Sie OnDisable und OnDestroy, um nur zu erkennen, wenn das Skript oder GameObject, an das es angehängt ist, nicht zerstört wird, wenn Sie die Home-Taste drücken oder die App beenden.

void OnApplicationPause(bool pauseStatus) 
{ 
    if (pauseStatus) 
    { 
     Debug.Log("Paused"); 
    } 
    else 
    { 
     Debug.Log("resumed"); 
    } 
} 

void OnApplicationFocus(bool hasFocus) 
{ 
    Debug.Log("resumed"); 
} 
Verwandte Themen