作者: Brett Bibby – 資深Unity原廠講師
本篇我們要來介紹如何匯入上次的成果到Unity, 文章最下面是整個範例專案打包。Unity用正常方式匯入上次完成的的圖形和中介資料是挺容易, 但是匯入的圖形會預設為一般的貼圖, XML檔案會被當成一個文字Asset匯入, 所以我們要寫一個匯入功能讓Unity來處理這些檔案, 或許你會想說我會寫一個AssetPostprocessor來 解決,那你就誤會了, AssetPostprocessor的問題是它限制我們只能處 裡Asset內容但不允許我們在裡面建立我們要的新材質, 所以解決方法就是寫一個編輯器腳本。
我們的輸入器需要下列流程:
- 載入和逆排序輸出XML中介資料
- 改變貼圖輸入設定,我們才能用程式處裡圖形
- 建立貼圖Atlas,並將所有的貼圖放入
- 為每一個圖形建立mesh asset
- 為每一個mesh建立Object
- 建立一個Scene來放這些Object
編寫編輯器腳本
和輸出腳本一樣,你可以在範例裡找到輸入的腳本, 要讓它可以運作,把它放在Editor的目錄裡, 如果你以前沒有編寫過Unity編輯器腳本, 那代表你沒有了解Unity最強大的功能之一, 編輯器腳本是一般腳本的集合,所以如果你已經會寫遊戲腳本, 代表你一定也有基本的編輯器腳本知識。
編輯器腳本有有三點和普通遊戲腳本不同,首先, 你必須放在一個名為Editor的目錄或子目錄裡,再來, 腳本最上面必須要有這一行
最後,為了呼叫這個腳本編輯器, 它必須被歸類在一個編輯器的子類像是 Editor,ScriptableWizard等等, 雖然你不一定要這樣歸類, 但如果你想要接收Event事件或是和編輯器互動, 這些類別運作方式才會像是MonoBehaviour。 對於我們本章的目的而言我會使用基本的Editor類別。
跟上一篇一樣,我不會逐一介紹每一行程式, 因為腳本文件裡面會有註解,但我會介紹一些值得注意的地方。我們需要一些管道來呼叫輸入流程, 所以我用下面這個語法來讓選單加在Unity的Assets選單 裡。
現在我們會有個Import HOG Scene功能在Assets選單,選擇之後可以執行腳本, 接下來就是讓這個腳本執行我們要的內容。
首先要做的是轉換XML檔案到我們想要用的格式,例如資料類別( Data Class),之前我們寫匯出器時規劃了資料的排列格式, 有這樣做就很容易放到一個資料類別, 我們要的資料類別會符合我們輸出的XML結構,如下圖所示:
要真正轉換XML檔案到資料類別,我們使用內建的.NET序列化 方式。
由於我們將使用程式來建立一個場景, 要排除建立場景各種可能產生的問題確保它可以被存檔, 我們呼叫下列語法:
然後我們就可以刪除已存在的舊場景並建立新場景
接下來是修正texture import設定,預設貼圖是無法讀取的, 所以我們需要改為可讀取,才能用程式把圖放入Atlas, 這裡同時也順便改變一些其他設定。
現在我們已經可以建立新的Atlas材質, 把貼圖和其他需要放入的東西放進去
我們已經完成了所有基本工作, 現在來把圖檔一個一個放入建立好的網格(Mesh) 然後放入物件(Object)然後對應座標放入場景( Scene),這裡有很多程式碼所以不在全部說明, 如何在Unity建立2D的技術是最有趣的部份, 你可能會訝異的是它其實很簡單。 我用一個功能來處理所有的2D物件,大概是長這樣:
看起來很多程式碼,但是其實很簡單。終於,在完成建立所有的2D Assets之後, 我們只要改變相機的設定讓它變成像在photoshop看到的一 樣完美即可。
如果你好好的研究所有程式碼,對於本章你應該很容易理解。如果一切執行順利, 匯入腳本後你應該會看到整個場景被建立起來並順利在Unity裡 面呈現。
「註一」:meta-data(中介資料), 意思是用來詮釋補述資料本身的延伸資料, 在本範例就是XML文件,用來補充描述2D圖形的定位座標、 名稱和群組分類,在匯入Unity可以直接被分析的額外資料。
沒有留言:
張貼留言