作為Unity程式設計師需要掌握的技能
筆者介紹:姜雪偉,IT公司技術合夥人,IT高階講師,CSDN社群專家,特邀編輯,暢銷書作者,已出版書籍:《手把手教你架構3D遊戲引擎》電子工業出版社和《Unity3D實戰核心技術詳解》電子工業出版社等。
最近公司由於人員變動,需要招聘Unity3D程式設計師,面試了很多人,學歷從專科到研究生,在這些人中有工作兩年的,三年的,五年的等等。在面試的過程中,面試者對於Unity基礎知識的掌握很不紮實。如果只是為了完成策劃需求而無視基本功,到頭來會導致自己的基礎非常薄弱。就跟霧裡看花一樣,明面上工作經歷非常豐富,實際上這些經歷經不起任何推敲。作為Unity開發者來說,對於Unity的一些基本常識還是要清楚的。下面就給那些學習Unity開發的程式介紹一下:
一、Unity作為3D遊戲引擎必須要掌握固定流水線和可程式設計流水線,因為涉及到矩陣變換的知識點,在專案開發中會用得到的,如果讀者不懂的可以查閱資料。
二、Unity作為3D引擎有自己的座標系,在此強調一點,雖然它的圖形API分為DirectX和OpenGL,但是它的世界座標系是左手座標系。
三、另外要掌握的座標系有螢幕座標系,UI座標系,視口座標,包括它們的原點是在哪個位置,因為在專案開發中也會涉及到以上三個座標系之間的變換。
四、函式的執行順序,比如Awake,OnEnable,Start 等,以及3D碰撞體的執行效率,比如球體,膠囊體,立方體,Mesh等等。
五、程式的優化處理,這個是面試考察的重點,記憶體的管理也是Unity程式開發的重中之重。記憶體管理無非就是對記憶體的使用,針對UI的記憶體管理使用的是圖集方式,Unity自身的圖集功能浪費記憶體,比如2048*2048的圖集大小,它佔的記憶體是4M,也就是說不管圖集是否填滿,它都需要在記憶體中開闢4M的空間,但是如果使用Texture Packer工具就可以節省沒有填滿的空間,針對大量UI的載入可以採用分類打包圖集的方法處理。當然記憶體池的使用也是可以應用到UI的管理,另外就是對3D場景資源的管理,需要場景圖片有自己的相簿,這樣圖片可以重複利用,另外模型的面數,骨骼數量,材質數量這些都需要去關注。
六、記憶體優化還需要涉及到圖片的格式,不帶Alpha通道的圖片採用jpg格式,帶有Alpha通道的採用png格式,這是一種處理方式,另外一種處理方式就是將Alpha通道單獨拿出來,所有的圖片都是jpg格式,然後用帶有Alpha通道的圖片跟jpg格式檔案進行結合使用。這樣也可以優化圖片的大小。
七、在架構設計方面,就要注意了,程式碼的編寫,比如常用的設計模式,工廠模式,單例模式,MVC模式,FSM模式,觀察者模式等,這些模式作為開發者必須要掌握的。
八、接下來就是Shader編寫了,在這裡給讀者推薦一個編輯器工具Shader Forge編輯器,對於一些材質渲染非常好用,這個可以作為讀者學習Shader的工具。
九、另外對於C#中定義的String,StringBuilder或者List,ArrayList等它們之間的區分要搞清楚。
十、不同機型的適配處理,技術驗證等。
十一、熱更新技術的實現,市面上應用比較廣的是ulua作為指令碼語言的框架設計。
十二、作為客戶端開發者也需要了解一些網路方面的知識,比如tcp,udp,http這些協議處理的方式。
十四、作為渲染場景的後處理方式,比如Bloom,Blur,HDR,SSAO,PSSM等等。
十五、C#中的事件監聽,委託的使用也要熟練掌握。
十六、協程與多執行緒的區別。
十七、文字檔案的載入,比如json,xml,csv,二進位制等等。
以上作為Unity開發者必須要掌握的,很多人感覺在公司學不到知識,其實除了完成工作需求外,還需要主動的去學習,這樣才會真正的提高自己的技能。希望對讀者有所幫助吧。。。。。。。