Unity裏面Resources.Load之後爲什麼需要Instantiate?

       一個是加載到內存裏,一個是實例化到場景中

       這是unity的一個缺陷,本來一個gameobject加載之後,只需要addToScene就可以了,但它卻選擇做一次copy,然後在這個操作內附帶addToScene。

       它這樣做的理由無非是,運行修改物體後,原來資源的那一份不會變化,還可以再次使用。所以就強制每次用必須複製。

然而,gameobject複製其實是一個相當耗時的操作,而且必須佔用主線程,成爲了一個重要的卡頓點。

       預設(Prefab)是資源(Assets)的一種,場景(Scene)也是資源的一種,Unity運行是以場景爲單位的,所有你要把預設克隆(Instantiate)場景中才能運行物體的邏輯。

       Instantiate本質上是對一個引用的值進行一個深度Copy(克隆到場景中)。

       第一個GameObject prefab的Resources.Load是“解釋”你要加載的東西是個GameObject並且加載到內存中。

       第二個GameObject instance是對prefab進行一個深度copy克隆到場景中然後從Instantiate的返回值中持有他的引用。

       prefab和instance在C#層面是一個類型,因爲場景中的物體和資源中的預設都是 GameObject 類型的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章