實施例
在Unity5,假設名稱爲「SomeObject」一個遊戲物體在Assets/Resources/SomeObject.prefab
存儲爲一個預製的,我知道我可以如下創建該預製的一個實例:非實例化的加載的Prefab如何與實例化的比較?
GameObject prefab = Resources.Load<GameObject>("SomeObject");
GameObject instance = GameObject.Instantiate(prefab);
一旦執行,遊戲對象instance
將是原始「SomeObject」預製件的副本,並將被放置在當前活動場景中,名稱爲「SomeObject(克隆)」。
據我瞭解,在GameObject prefab
代表實際的預製資產,並把它(設置名稱,添加成分等)寫入到原來的預製資產,而這些變化堅持,即使之後所做的任何更改退出編輯器播放模式。
問題
由於所有GameObjects通常存儲在一個場景,並在上面的例子中
scene
財產上GameObject prefab
似乎被卸載/無效/未命名的,正是我應該考慮這個特殊的遊戲對象,以是?我似乎能夠用它做所有事情,我可以用普通的GameObjects完成任何事情,但在層次結構/場景視圖中顯示不出來。它有效地處於某種緩衝狀態,還是一種特殊的PseudoScene?它似乎通過
LoadSceneMode.Single
場景變化持續存在,但並不像DontDestroyOnLoad
場景那樣當對象被傳遞到GameObject.DontDestroyOnLoad(...)
時被移動到該場景。是否有在上述的例子
prefab
和instance
之間的任何其它值得注意的差異,比壽命的變化,無效場景其他並且是從一個不同的對象另一個(具有不同的GetInstanceID()
等)?由於呼籲
prefab
GameObject.Instantiate(...)
產生一個遊戲對象是是一個有效的場景,是有什麼辦法可以手動創建一個類似的「無現場」狀態GameObjects?我知道Unity打算讓所有GameObjects出現在場景中,所以這純粹是一個學術問題。
我試圖翻翻functionsinvolved的documentation,但沒有進入具體是什麼正在發生的技術細節,當你對一個預製資源調用Resources.Load
。
正如你大概可以告訴我有效地一次推出3個問題,我現在處於一個缺乏直覺的位置,以便真正知道我不知道的是什麼,如果這是有道理的。再試一次:因爲Resources.Load產生的GameObject處於無法手動創建的狀態,所以我很好奇這些差異的確切性質,並希望有更多關於幕後操作的知識的人可以提供洞察力進入這裏玩的系統,這些系統在正常文檔中可能不會立即顯現出來。我很抱歉無法更清楚地說出這一點。 – Johannes