2016-11-30 27 views
1

尋找在場景之間過渡的模式,將對象的一個​​實例移動到下一個場景,然後將其返回到前一個場景,但不會破壞先前場景中的其他對象。這裏是上下文:用於在場景之間移動某些對象的統一模式?

  • 當我的遊戲加載時,它連接到我的服務器以獲取玩家可以控制的字符列表並從預製動態實例化它們。
  • 加載腳本將每個角色遊戲對象移動到主場景,然後加載該場景。
  • 主場景現在有可以與之交互的角色。到現在爲止還挺好。其中一個命令是選擇一個特定的角色並將它們發送到一個任務上,該任務有自己的任務場景。
  • 我可以將該角色移動到任務場景並在任務完成時將其移回。然而,其他不在任務中並且不應該在任務場景中的角色現在被銷燬,因爲主場景被卸載。

我正在尋找一種模式來實現這一點。我讀過的大部分建議使用DontDestroyOnLoad,但實際上這會將所有角色移動到所有場景中,導致任務場景中的角色太多。另一種選擇可能是創建一個包含所有角色信息的遊戲對象,在場景之間傳遞並在每個場景中都有邏輯來重新實例化該場景中的適當角色。這感覺就像是一個很大的開銷,因爲我沒有其他理由不斷地重新擦除它們。也許第三種選擇是重構我的遊戲,以便任務場景只添加到主場景中,並顯示爲某種疊加塊,用於阻止/捕獲輸入。這聽起來很混亂,可能會有性能問題(針對Android)。

有沒有人有這樣的好模式?

+0

你需要每個字符的多個實例?靜態聲明可以做到這一點,只要你不需要2個「弓箭手」或其他任何東西。 – Aaron

+0

是的,我需要多個角色,這就是爲什麼我有這個問題 - 移動一個角色相對簡單。每個角色都是探險家。你,玩家可以僱用他們(導致不止一個),你可以發送他們的冒險。只有一名探險者可以參加每次冒險,而其他探險者需要留在主場景中,而不是冒險。 –

+0

靜態列表應該可以工作。在創建它們時,將它們添加到列表中。 – Aaron

回答

-2

將評論轉變爲答案。

可以從任何場景訪問靜態變量。根據你需要的每個類類型的數量,你可以實例化一個靜態類,或者一個靜態的List/Array類。一旦你添加了對象,你可以從任何地方訪問它們。如果這不會成爲內存問題(例如數千個大型對象),那麼這應該適合您的目的(無論如何,這些內容都需要在整個遊戲中持續存在)。

+0

但靜態變量的目的不是這樣。此外,它會導致數據丟失。遊戲對象的集合將無法在重新加載後存活。所以不,這不是一個合適的答案。 – Everts

+0

我總是在發帖前研究,除非它真的很愚蠢。這是我發佈之前的參考資料。 http://answers.unity3d.com/questions/41891/static-variables-between-scenes.html – Aaron

+0

那麼,儘管20 + upvote,這並不正確。我假設其中的19人來自初學者,很高興有一個工作解決方案。但它並沒有說得對。靜態具有不同的目的。 PlayerPrefs和DontDestroyOnLoad具有將數據保存在場景或會話中的目的。 – Everts

0

與場景管理器可以創建一個空場景,在這個空場景中放置所有想要保留的對象。

卸載第一個場景(不是您創建的場景)並加載下一個場景後。

當您的下一個場景加載時,您將所有對象從您創建的場景轉移到您剛加載的場景。

PS:你必須在同一時間多個場景負荷檢查此鏈接以獲取更多的信息: https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.html