2013年7月4日 星期四

無痛轉移2D作品到Unity第二步,匯入Unity

作者: Brett Bibby – 資深Unity原廠講師
本篇我們要來介紹如何匯入上次的成果到Unity,文章最下面是整個範例專案打包。Unity用正常方式匯入上次完成的的圖形和中介資料是挺容易,但是匯入的圖形會預設為一般的貼圖,XML檔案會被當成一個文字Asset匯入,所以我們要寫一個匯入功能讓Unity來處理這些檔案,或許你會想說我會寫一個AssetPostprocessor來解決,那你就誤會了,AssetPostprocessor的問題是它限制我們只能處裡Asset內容但不允許我們在裡面建立我們要的新材質,所以解決方法就是寫一個編輯器腳本。
我們的輸入器需要下列流程:
  1. 載入和逆排序輸出XML中介資料
  2. 改變貼圖輸入設定,我們才能用程式處裡圖形
  3. 建立貼圖Atlas,並將所有的貼圖放入
  4. 為每一個圖形建立mesh asset
  5. 為每一個mesh建立Object
  6. 建立一個Scene來放這些Object

編寫編輯器腳本

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

沒有留言:

張貼留言

關於我自己

我的相片
Unity台灣官方部落格 請上Facebook搜尋Unity Taiwan取得Unity中文的最新資訊