對 Unity 預制體的調研


1. 什么是預制體 #

在進行一些功能開發的時候, 我們常常將一些能夠復用的對象制作成.prefab的預制體,然后將預制體存放到 Resources 目錄之下, 使用時再動態加載到場景中並進行實例化. 例如 : 子彈、特效甚至音頻等, 都能制作成預制體.

預制體英文名稱即 Prefab 是一種資源類型 —— 存儲在項目視圖中的一種可重復使用的游戲對象.

2. 預制體的優點 #

預制體可以多次放入到多個場景中;
當你添加一個預制體到場景中, 就創建了它的一個實例;
所有的預制體實例鏈接到原始預制, 基本上等於就是它的克隆;
不管你的項目存在多少實例, 當你對預制體進行任何更改, 你將看到這些更改將應用於所有的實例上;

3. 使用預制體注意的幾點 #

3.1 創建預制體 ##

為了創建一個預制, 必須使用菜單構造一個新的空白預制, 這個空預制不包含游戲對象, 還不能創建它的一個實例. 想象一個新的預制為一個空的容器, 等着用游戲對象數據來填充. 一個新的、空的預置不能實例化直到你用一個游戲對象來填充它.

要填充預制, 需要使用一個場景中已經創建的游戲對象.

  • 從菜單選擇 Assets->Create->Prefab 並為新預制命名;
  • 在層次視圖 Hierarchy View 中, 選擇你想使之成為預制的游戲對象;
  • 在層次視圖中拖動該對象到項目視圖中的新預置上;

當完成這些步驟之后, 游戲對象和其所有子對象就已經復制到了預置的數據中. 該預置現在可以在多個實例中重復使用, 層次視圖中的原始游戲對象已經成為了該預置的一個實例.

3.2 預制體實例 ##

可以在程序運行時來執行實例化操作, 創建預制物體, 在腳本中引用預制物體. 相對而言腳本中代碼也比較簡潔, 需要修改也比較簡單只要對預制物體進行修改就可以了, 不需要添加其他修改代碼, 與普通腳本相比預制創建的實例化物體, 全部都是預制物體的克隆, 可以提高程序運行效率和節省內存空間.

要在當前的場景中創建預制體的一個實例, 就從項目視圖拖動預制到場景中或層次視圖中即可. 此實例是鏈接到該預制的, 如下圖在層次視圖中使用藍色文字顯示.

如果選擇了一個預制的實例, 並希望做些改變以影響到所有實例, 可以在檢視視圖中單擊 Select 按鈕選擇預制源.

** - 繼承 Inheritance **

繼承是指當預制源發生變化, 這些變化將應用於所有已鏈接的游戲對象.

例如, 如果添加一個新的腳本到預制, 所有已鏈接的游戲對象都將立刻包含該腳本. 但是它有可能改變一個單獨實例的屬性, 同時保持鏈接. 改變任何一個預制實例的屬性, 可以看到變量名稱變為粗體, 現在該變量可以被重寫, 所有的重寫屬性不會影響預制源的變化.

這使你可以修改預制實例使它們變得獨一無二, 而不破壞它們與預置源之間的鏈接.

** - 破壞和恢復預制鏈接 Breaking and Restoring Prefab Links **

有些行為將破壞單個實例及其預制源之間的鏈接, 但鏈接總是可以恢復的.

下面的行為將破壞鏈接 :

  • Adding or removing a Component 添加或刪除一個組件;
  • Adding or removing a child GameObject 添加或刪除一個子對象;

這些行為將引起一個破壞鏈接的警告/確認消息, 確認該行為將破壞鏈接. 這樣, 更改預制源將不再影響已破壞了鏈接的實例.
要恢復該鏈接, 你可以在實例的檢視視圖中單擊 Reconnect 或 Apply 按鈕.

  • Reconnect 將丟棄與預置源的所有差別;
  • Apply 將復制所有差別到預置源中(包括所有其它預置實例);

** - 導入預制 Imported Prefabs **

當你放置一個網格資源到你的資源文件夾中, Unity 自動導入文件並生成一些類似於一個預制的網格. 這實際上並不是一個預制, 它只是這個資源文件本身. 在進行正常預制工作時, 資源的實例化名沒有某些限制.

資源是作為一個游戲對象存在於場景中的實例, 鏈接到源資源代替一個正常的預置.

作為正常的游戲對象, 組件可以被添加和刪除. 但是, 你不能應用任何變動到這個資源本身, 因為這樣將給資源文件本身添加數據. 如果你創建一些你想要重復使用的東西, 你應該將資源實例制成一個預制.

4. 加載預制體並實例化的代碼 #

將預制體放到 Resource 文件夾下
GameObject.Instantiate(Resource.Load("預制體的名字"));
或者
GameObject instance = Instantiate(Resources.Load<GameObject>("預制體的名字"));

5. 學習資料來源 #

http://www.ceeger.com/Manual/Prefabs.html
http://blog.csdn.net/yuxikuo_1/article/details/47836975
http://blog.csdn.net/linshuhe1/article/details/51355198

End.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM