Unity3D游戲開發初探—1.跨平台的游戲引擎讓.NET程序員新生


一、Unity3D平台簡介

  Unity是由Unity Technologies開發的一個讓輕松創建諸如三維視頻游戲、建築可視化、實時三維動畫等類型互動內容的多平台的綜合型游戲開發工具,是一個全面整合的 專業游戲引擎。Unity類似於Director,Blender game engine, Virtools 或 Torque Game Builder等利用交互的圖型化開發環境為首要方式的軟件其編輯器運行在Windows 和Mac OS X下,可發布游戲至 Windows、Mac、Wii、iPhone、Windows Phone 8和Android平台。也可以利用Unity web player插件發布網頁游戲,支持Mac 和Windows的網頁瀏覽。它的網頁播放器也被Mac widgets所支持。

  據不完全統計,目前國內有80%的Android、Iphone手機游戲使用Unity3D進行開發,比如著名的手機游戲《神廟逃亡》就是使用Unity3D開發的,也有《縱橫時空》、《將魂三國》、《爭鋒online》、《萌戰記》、《絕代雙驕》、《蒸汽之城》、《星際陸戰隊》、《新仙劍奇俠傳Online》、《武士復仇2》、《UDog》等上百款網頁游戲都是使用Unity3d開發。

  當然,Unity3D不僅只限於游戲行業,在虛擬現實、工程模擬、3D設計等應用方面也有着廣泛的應用,國內使用Unity3D進行虛擬仿真教學平台、房地產3維展示等項目開發的公司非常多,比如綠地地產、保利地產、中海地產、招商地產等大型的房地產公司的三維數字樓盤展示系統很多都是使用Unity3D進行開發。比如《Miya家裝》、《飛思翼家裝設計》、《狀元府樓盤展示》等等。

  赤果果的數據->國內53.1%的人使用Unity3D進行游戲開發,有80%的手機游戲使用Unity3D開發,跨多平台(IOS、Android、Windows
Phone、Windows、Flash、XBOX360、PS3、Wii等)游戲引擎,可以開發2D、2.5D、3D游戲。appstore手機上有1500+款用Unity3D開發的游戲,而Unity3D語言就有C#(還有JavaScript,但不是原生的JavaScript)。

  因此,對於我們.NET程序員,如果說Mono讓我們進入了跨平台服務器的Web開發時代,Unity3D則讓我們趕上了移動手游開發的浪潮,不至於掉隊甚至錯過這波浪潮。我又想起園子里的一位大牛—張善友先生寫的一篇博文的標題:現在是C#程序員最好的時代。是啊,感謝開源社區的大牛們,我們擁抱着Mono,還迎來了Unity3D

二、Unity3D IDE簡介

  Unity(http://unity3d.com/)提供了免費的下載,目前最新版本是4.3.4f3,安裝包大概1個G左右。目前提供了收費的專業版和免費的版本以及30天的試用版,一般我們學習者使用免費版足矣。當然,在大天朝各種破解補丁、注冊機是可以找到的,不過涉及到版權問題這里不進行討論,請自行百度或Google搜索。下載完成后,即可安裝,安裝步湊就是各種下一步(Next),中途會提示你是否需要安裝幾個組件:Examples、Web Player以及Mono Developer,一般都全選上,當然也可以不選。Mono Developer是個好東西(但是智能性上趕不上強大的VS),推薦裝上。

  安裝完成並且注冊(或者破解)之后,你就可以進入以下所示的界面了。恭喜你,你已經進入Unity3D的學習征途,當然,還僅僅是第一步。這里需要提示一下:在新建Unity3D項目的時候,一定要放在非中文命名的路徑中!另外,每次在創建新項目的時候,Unity3D都會自己重啟一下,這是正常現象哈,不要以為你的Unity3D安裝沒成功。

三、第一個Unity3D程序-Hello Cube!

  (1)在模型對象區域中的Hierarchy中Create一個Cube立方體,在Inspector中修改它的Position XYZ均設置為0;

  (2)Unity3D場景默認是木有光照源的,因此需要在Hierarchy中Create一個Directional light(平行光);

  (3)修改Main Camera(攝像機看到的就是屏幕看到的)的Position為(0,1,-5),這樣看起來清楚一點;

  (4)在項目資源管理器中Create一個C# Script,命名為CubeControl。創建完成之后,雙擊該腳本文件,自動進入MonoDeveloper(默認是MonoDeveloper,當然我們也可以使用Visual Studio作為默認編輯器)。 

  (5)在MonoDeveloper中,寫入以下代碼。這個代碼主要是判斷用戶的按鍵操作,如果是上、下、左、右操作,則對指定的對象進行指定方向的翻看。(主要寫在Update方法中,程序的每一幀都會調用Update方法,1秒默認30幀

 1 using UnityEngine;
 2 using System.Collections;
 3 
 4 public class CubeControl : MonoBehaviour {
 5 
 6     // Use this for initialization
 7     // Unity3D中常用的幾種系統自調用的重要方法
 8     // 首先,我們有必要說明一下他們的執行順序:
 9     // Awake--Start--Update--Fixedupdate--Lateupdate--OnGUI--Reset--onDisable--onDestory
10     // Start僅在Update函數第一次被調用前調用
11     void Start () {
12     
13     }
14     
15     // Update is called once per frame
16     void Update () {
17         //按鍵盤上的上下左右鍵可以翻看模型的各個面[模型旋轉]
18         //
19         if(Input.GetKey(KeyCode.UpArrow))
20         {
21             transform.Rotate(Vector3.right*Time.deltaTime*10);
22         }
23         //
24         if(Input.GetKey(KeyCode.DownArrow))
25         {
26             transform.Rotate(Vector3.left*Time.deltaTime*10);
27         }
28         //
29         if(Input.GetKey(KeyCode.LeftArrow))
30         {
31             transform.Rotate(Vector3.up*Time.deltaTime*10);
32         }
33         //
34         if(Input.GetKey(KeyCode.RightArrow))
35         {
36             transform.Rotate(Vector3.down*Time.deltaTime*10);
37         }
38     }
View Code

  (6)將保存后的CubeControl通過鼠標拖動到模型對象區Hierarchy中的Cube上進行腳本綁定。綁定腳本和對象之后,在Cube的屬性中會看到下圖所示。*PS:腳本需要對應到一個具體的游戲對象才有意義!

  (7)現在可以預覽一下我們的第一個程序了,點擊如下圖所示的播放按鈕,即可進入模擬器看到效果。這時,我們通過按下鍵盤中的上、下、左、右鍵,Cube立方體會隨着我們的按鍵翻轉。怎樣?麻雀雖小,但是五臟俱全吧,我們的第一個Unity3D程序—Hello Cube就完成了。

  (8)接下來,如果按照正式項目的步湊的話就輪到發布程序了。這里我們可以體驗一下Unity3D強大的跨平台能力,我們這個Demo可以發布為各種主流類型操作系統兼容的應用程序。通過點擊File-Build Settings,即可進入如下圖所示的發布設置窗口界面。查看Platform列表,里邊囊括了幾乎目前所有的操作平台,也就是說我們可以實現一次開發,多平台運行,爽哉!

  (9)這里我們做個測試,發布一個Windows平台的典型exe程序和一個Web平台的Flash程序來體驗一下。(我的筆記本沒有安裝Android模擬器,更不要說Mac模擬器了,所以,你懂的)

  

  (10)足夠細心的你相信已經發現這個Cube立方體的棱角有鋸齒,這是因為在默認環境下,抗鋸齒這個屬性是設為Disabled(禁用)的。因此,我們可以點擊Edit→Project Settings→Quality,將Anti Aliasing這個屬性選為2x Multi Sampling(可選值為2x Multi Sampling、4x Multi Sampling以及8x Multi Sampling,值越大越平滑,但是會占用更多的系統資源,開發調試階段一般選擇為Disabled,當然,如果你的機器足夠好,選擇4x或8x也是一個不錯的選擇)。

 四、原諒我是“外貌”協會—酷炫場景導入

  相信大家都玩過很多游戲,對於游戲中那些宏大逼真的游戲場景應該是歷歷在目。所以,對於我們這種對於游戲場景外貌要求比較高的“玩家”(不過,我很少玩網絡游戲,目前一直在玩的只有Pro Evolution Soccer實況足球),上面那個一點場景都木有的游戲對我們來說沒有一點吸引力!因此,對於外貌協會的挑剔客觀,Unity3D支持3Ds Max的FBX模型文件直接導入,為我們的游戲“整容”,一秒變白富美!

  (1)從網上下載一個FBX模型文件;(這個網上很多,請自行百度或Google。我這里使用的是一個希臘聖殿的場景FBX文件,下載地址見本文底部。)另外,這里需要提醒一下:如果下載下來的FBX文件以中文命名,請將其改為英文命名,並且最好不要有空格。例如,我這里將其原文件名“希臘聖殿”改為TempleScene。

  

  (2)將下載的FBX模型文件拖動到Unity3D中的資源管理器區域中,完成后在資源管理器中會出現該模型文件圖標;

  (3)將上圖中帶有播放按鈕的TempleScene.FBX文件拖動到Scene(游戲場景視圖)中,於是一秒變為希臘聖殿的場景!

  (4)這時我們稍微調整一下Main Camera和Cube的Position就可以瀏覽一下在聖殿場景下的Hello Cube程序了。

  (5)但是我們發現,雖然立方體可以隨着我們的鍵盤方向操作翻轉,但是場景一直停在一個固定的角度。於是乎,我們想讓場景也隨着立方體的翻轉而轉動,我們該怎么來做呢?這就涉及到我們剛剛所寫的CubeControl腳本了,在Unity3D中腳本是需要和對象綁定才能正確運行的。因此,我們只需要把CubeControl和剛剛導入的這個聖殿的場景對象綁定一下即可。所以,這里從資源管理器區域中把CubeControl拖動到TempleScene處就OK了。最后,可以通過查看TempleScene的屬性觀察是否綁定上了腳本,如下圖所示。

  (6)最后,通過點擊播放按鈕在模擬視圖中可以查看。這下,只要我們按下鍵盤上的方向鍵,場景和立方體會一起轉動,爽吧!

PS:一般游戲公司里邊會有這么幾類角色: 主程(主程序員)、 主美(主美工師)以及策划、測試和客服。There is no doubt that 我們的目標是主程,精通一門開發語言,熟悉游戲腳本與服務端開發,對什么HTTP協議、Socket通訊等原理都懂一些,還了解一些常用的架構和設計模式,能夠熟練操作SQL語言與數據庫交互。但是,我們也不是神,不能啥都學啥都會,游戲場景設計這塊是主美的飯碗,所以我們只需要將美工設計好的場景模型加入游戲中,我們為游戲對象寫腳本,寫交互代碼讓游戲真正動起來即可!

五、小結

  Unity3D是一個強大的游戲引擎平台,我們可以很方便地在其上編寫一些簡單的游戲程序。通過和美工的配合,我們完全可以開發出很酷炫的游戲。而且更為重要的是:

  1.Unity3D可以基於Mono實現跨平台,可以一次開發,多處運行;

  2.Unity3D可以使用C#編寫腳本,眾多的.NET程序員們可以快速學習上手,趕上手機游戲的浪潮尾巴;

  后面我們會繼續初探Unity3D,實現一個地球圍繞太陽轉的Demo、為游戲添加地形、理解一下物理引擎、GUI,最后實現一個簡單的打箱子游戲來結束這次初探之旅。另外,本人就一苦逼的計算機專業學生,寫博文沒多久,最近興趣起來了,就寫的多了一點,內容如有錯誤敬請諒解。博客內容借助於以下的參考文獻資料,站在巨人的肩膀上,我們可以看得更遠,在此,謝謝這些巨人們!

參考文獻與資料

  (1)百度Unity3D百科:http://baike.baidu.com/link?url=jB3DpXJ9OQ39FEJB8qLEDfkMZL_dVBw2AFVPTICOACW6POmxt7EWaIAhhgiAre5mIfHRfxv5uGT82s_vLL2zPK

  (2)傳智播客Unity3D公開課:http://net.itcast.cn/subject/Unity3D/index.html

  (3)yuxueliang,《Unity3D入門之Unity3D介紹以及編輯器的使用(1)》:http://www.cnblogs.com/yxlblogs/p/3486027.html

  (4)蘇若年,《初始Unity3D開發3D游戲》:http://www.cnblogs.com/dennisit/archive/2013/05/25/3098227.html

附件

  (1)希臘聖殿場景FBX模型文件:http://pan.baidu.com/s/1eQCB4mY

 


免責聲明!

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



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