我正在Unity開發移動益智遊戲,當我退出我的遊戲到主屏幕並返回時,遊戲從同一個地點繼續,看起來沒問題(沒有重寫onPause/onStart),我錯過了什麼?退出時是否需要存儲變量?人們通常會拯救什麼?我害怕將來會有錯誤。我是否必須使用onPause/onStart/onDestroy
回答
我錯過了什麼?
是
我需要的時候退出來存儲變量?
是
恐怕要在未來的錯誤。
是的,你會的。你會遇到失去的變量問題。這是你負責任的實施。僅僅因爲一切看起來並且工作正常並不意味着什麼。這種行爲在不同的平臺和設備上有所不同,也取決於已經在背景+當前可用RAM上運行了多少應用程序。通常,您使用一個類來存儲所有重要變量,然後序列化並保存它們。
請參閱this發佈說明如何做到這一點,並提供一個包裝,以輕鬆保存和加載任何類。當Unity即將中斷時,您必須保存遊戲狀態。這些都是可以用來檢測這個功能,你必須知道:
你必須決定使用哪些保存數據。有時,由於每個平臺中每個平臺的行爲,您必須使用它們中的多個。值得每個人閱讀文檔以瞭解他們在每個平臺上所做的工作。
好吧,我明白我需要將每個類保存到json文件。是否需要爲我擁有的每個課程創建不同的包裝,或者是否有一些可以自動掃描一切並恢復的工具(可能來自資產商店)。另外,遊戲對象首選項(有些沒有附加腳本)是什麼保存所有活動的gameobjects(他們的變換/其他信息)的最佳方式是什麼? – SHAI
不是。我提供的包裝器使用C#泛型,這意味着它可以保存任何類而不用修改。對於你的問題的其餘部分,我被問到這一點。不要在場景中保存所有內容。保存你需要保存的內容。此外,您不保存變換。你創建一個簡單的類來保存這個變換的位置,旋轉和縮放,並且你應該保存。我建議你創建一個SaveManager腳本,每個GameObject在創建時註冊它們。您可以將每個對象添加到SaveManager中的列表中,以便稍後保存它們。 – Programmer
你是什麼意思,不保存場景中的所有內容?我必須保存:在遊戲期間添加的新遊戲對象(克隆),以及那些在開始時與場景一起出現(至少是他們的信息)的人,不僅是變換,還有其他定義對象的信息。關於我的類,我想我現在必須將每個私有變量都改爲SerializeField了嗎? – SHAI
- 1. 我是否必須使用UNION insted JOIN?
- 2. 是否必須使用SSL?
- 3. 是否必須使用「remember_token」字段?
- 4. 是否必須使用flags屬性?
- 5. 分配時是否必須使用initWithString?
- 6. Bootstrap Carousel是否必須使用圖像?
- 7. Mercurial Server是否必須使用Mercurial?
- 8. 我們在使用會話時是否必須使用mysql_real_escape_string()?
- 9. 我是否必須使用Compass使用Django-Grappelli修改CSS?
- 10. 我是否必須使用_ID作爲SQlite主鍵?它是否必須是一個INT? (Android Dev)
- 11. 我是否必須處理我不使用的返回對象?
- 12. 我是否必須配置SQLiteCommand對象?
- 13. 我們是否必須刪除QUpdSockets?
- 14. 我是否必須一直指定System.Web.HttpContext.Current.Server?
- 15. 我是否必須處理Process.Start(url)?
- 16. 我是否必須重新開始?
- 17. 我的Servlet是否必須實現Serializable?
- 18. 我是否必須停止System.Timers.Timer?
- 19. 我是否必須使用ComPtr調用釋放函數?
- 20. 我是否必須在C++中使用引用?
- 21. 用戶ID是否必須是整數?
- 22. 我是否必須在每個類中使用「包」術語
- 23. 當我有svn @ sourceforge時,是否必須使用maven倉庫?
- 24. 我是否必須使用php configure命令?
- 25. 我們是否必須使用Cognito進行Dynamodb訪問?
- 26. 我是否必須爲每一行使用colspan只爲一行?
- 27. 我是否必須使用BFS實現Adjacency矩陣?
- 28. 我是否必須購買SQL Server才能使用Access 2013
- 29. 我們是否必須使用事實表來報告?
- 30. 如果我綁定參數,是否必須使用mysql_real_escape_string?
我假設你正在談論移動設備 - 你確定你確實關閉了應用程序(即打開正在運行的進程來殺死它),還是暫時暫停它然後回到它?如果你沒有真正關閉它,應用程序將駐留在內存中,並且在返回時不會丟失任何數據。但是如果你真的關閉了應用程序,那麼它將失去你所擁有的任何遊戲狀態數據,除非它被保存在其他地方。 – Serlite
「關閉它」我的意思是回答電話,甚至開始播放一個新的應用程序,然後在一小時後回到我的應用程序...例如,在iPhone上,沒有人真正關閉應用程序,當退出到家中屏幕。 – SHAI
在這種情況下,您並沒有真正關閉該應用程序 - 您將其暫停,因爲您的手機會將其保存在內存中(直到它用完爲止,此時它將開始清除數據以爲最近使用的應用程序騰出空間)。但是,關閉手機將實際關閉它。如果您的意圖是即使在應用程序停止並重新啓動的情況下也保留遊戲狀態,那麼您需要編寫代碼以將數據保存到靜態文件,然後在遊戲啓動時重新加載該文件。人們自己關閉應用程序 - RAM有限,他們通常會關閉閒置的應用程序,因此性能不會受到影響。 – Serlite