王樹斌
摘要:該文通過一個小程序介紹了unity3d開發(fā)游戲的流程,并對使用unity3d開發(fā)游戲過程中常用的技術(shù)進行了說明。
關鍵詞:unity3d;漫游;物理碰撞
中圖分類號:TP391文獻標識碼:A文章編號:1009-3044(2012)22-5351-02
1 unity3d概述
unity3d是由丹麥Unity公司開發(fā)的游戲開發(fā)工具,具體的特性包含整合的編輯器、跨平臺發(fā)布、地形編輯、著色器、腳本、網(wǎng)絡、物理、版本控制等特性。Unity3d游戲引擎和其他游戲引擎的一大差別在于,它更加注重設計者對游戲可玩性的關注,而不是單純的追求設計的簡易度。同時相對其他游戲引擎,unity3d的價格更為便宜,這也吸引了廣大的游戲開發(fā)者。
unity3d用了PhysX的物理引擎,在植被方面使用了Unitree,并內(nèi)置了大量的Shader供開發(fā)者使用,這些Shader即可滿足開發(fā)者的常用效果。Unity公司在腳本方面非常強大,unity3d支持JaveScript、C#等腳本,如果開發(fā)非網(wǎng)頁的獨立版還可使用插件。
2用unity3d開發(fā)項目流程
采用unity3d開發(fā)項目,我們這里以控制一個球體前后左右移動為例,大概分為以下6步:
第一步:創(chuàng)建工程。打開unity3d,彈出一個窗口提示要打開工程還是創(chuàng)建工程,選擇創(chuàng)建工程(Create new project→Browse選擇路徑→Create)。一旦工程創(chuàng)建成功,系統(tǒng)自動生成三個文件Assets(此文件是系統(tǒng)的資源文件有物理屬性、貼圖等資源)、Library,Temp。
第二步:建立場景。你可以添加一個地形作為場景,方法是菜單欄Terrain→Create Terrain.為了簡單直接,在此新建個平面作為場景。方法是:菜單欄→GameObject→Create Other→Plane,創(chuàng)建成功后在場景編輯窗口(Scene窗口)出現(xiàn)一個灰色的平面,同時在Hierarchy窗口出現(xiàn)該平面的名稱。當然為了直觀,你可以幫它改名,方法是F2(或點擊然后右鍵rename),輸入你要的名字(例如:myScene)。你可以在Inspector窗口查看myScene的一些屬性,為了方便我們把myScene的Transform的position的x,y,z全改為0。改完以后如果你在場景窗口找不到你的場景(myScene),你可以采用以下方法快速找到它:在Hierarchy窗口選中myScene,然后把鼠標的光標移到場景窗口,按"F"鍵,myScene就會出現(xiàn)在場景窗口的中央。這個方法適用于所有的游戲?qū)ο蟮牟檎遥ㄟ@個快捷鍵會經(jīng)常用到)。
第三步:建立一個球體。單擊菜單欄→GameObject→CreateOther→Sphere。同樣修改其名稱為(mySphere)。同樣在Inspector窗口修改其位置x、z為0,y改為0.5。
第四步:添加燈光。如果覺得光線比較暗的話,可以為場景添加燈光,unity3d提供了兩種燈光可供你選擇:點光源及平行光源。添加的方法與添加plane及sphere一樣,只是選擇point light或directional light。
第五步:這時你應該注意到Hierarchy窗口有一個系統(tǒng)默認生成的攝像機。如果沒有這個攝像機,你在Game窗口是看不到你創(chuàng)建的場景以及球體,以及燈光的。如果你覺得Game窗口的物體太小了,你可以把攝像機往前移動,方法當然是修改攝像機的屬性里的position,把z坐標設為-5。
第六步:讓球動起來!要控制球的移動,就需要編寫腳本。回到project窗口,點Create→JavaScript(當然你也可以單擊右鍵彈出菜單Create→JavaScript),腳本添加成功,按“F2”把它改名為(MoveSphere)。雙擊腳本把它打開,默認生成的文本如下:
function Update ()
{ }
這里先介紹一下function Update (),此函數(shù)的意思是每畫一幀就調(diào)用一次。接下來編寫控制球移動的代碼如下(以下代碼的意思是:按上下左右鍵就把物體(球)往前后左右移動一段距離):
if(Input.GetKey(KeyCode.UpArrow))
{ transform.Translate(0 , 0 , 2*Time.deltaTime);
}
if(Input.GetKey(KeyCode.DownArrow))
{transform.Translate(0 , 0 , -2*Time.deltaTime);
}if(Input.GetKey(KeyCode.LeftArrow))
{
transform.Translate( -2*Time.deltaTime , 0 , 0 );
}
if(Input.GetKey(KeyCode.RightArrow))
{ transform.Translate( 2*Time.deltaTime , 0 , 0);
}
代碼寫完了以后,按快捷鍵Ctrl+S保存。
保存好以后就可以執(zhí)行程序了,這個時候執(zhí)行,按上下左右,但是球沒動!因為我們還沒把球和代碼關聯(lián)起來,所以球是不會動的,因為還沒有受到代碼的控制。關聯(lián)的方法很簡單,直接把代碼從Project窗口拖到Hierarchy窗口的球(mysphere)上就行了。再次執(zhí)行,按上下左右鍵,這時候球就向前后左右移動起來了。
3常用技術(shù)
在使用unity3d創(chuàng)建游戲時,有很多重要的技術(shù),該文主要介紹兩個重要的技術(shù)。
3.1鍵盤交互技術(shù)
鍵盤交互主要是指能夠控制游戲者在系統(tǒng)中進行漫游,參觀各個位置的三維物體。鍵盤交互以設置方向鍵“↑”、“↓”、“←”、“→”或者“W”、“S”、“A”、“D”為控制鍵,分別用來控制化身的“前”、“后”、“左”、“右”的走動。在unity3d中,可以通過函數(shù)實現(xiàn)這些功能,以用“W”控制向前走動為例,腳本命名為js,其代碼如下:
var Speed = 50; //控制速度
var Control; //控制對象
function Update()
{
Control = GetComponent(js); //得到控制對象
if(Input.GetKey(KeyCode.W))//判斷按鍵
{
Control.ForWard();//前進
}
function ForWard()
{
transform.Translate(Vector3.forward * Time.deltaTime *Speed);
}
3.2碰撞檢測
碰撞檢測在3D游戲中是非常重要的一件事情,好的碰撞檢測要求人物在場景中可以平滑移動,當人物在在場景中漫游的時候,在各種前進方向上如果有被其他物體擋住的情況下,不只不能再繼續(xù)往前走,而且要盡可能地沿合理的方向滑動。在unity3d中,碰撞檢測的功能是由函數(shù)封裝好的,我們只需要調(diào)用函數(shù)就可以實現(xiàn)了。OnControllerColliderHit()函數(shù)是用于角色碰撞的,物體如果附加了Charactor Controller (Unity自帶的用于角色控制的腳本)則使用這個函數(shù)檢測碰撞,這是不需要加剛體的。一般的剛體之間碰撞使用OnCollisionEnter(),范圍觸發(fā)用OnTriggerEnter()。
4游戲的發(fā)布與測試
完成游戲制作后,調(diào)試運行基本沒有問題,就可以發(fā)布游戲了。unity3d發(fā)布游戲的流程如下:在unity3d中選擇文件菜單→發(fā)布設置,在這里可以選擇添加游戲場景,在前面的場景會先顯示。在平臺設置里邊可以設置web播放、PC、安卓等多種平臺,然后選擇發(fā)布,就可以編譯發(fā)布exe文件了。
任何軟件系統(tǒng)在設計好以后,都要進行測試。早期的軟件測試定義指出軟件測試的目的是尋找錯誤,并且盡可能的找出最多的錯誤。但是游戲測試的目的是解決玩家所遇非正常問題的預測工作,同時也是不斷調(diào)試系統(tǒng)的一個長期觀察任務。游戲測試作為軟件測試的一部分,它具備了軟件測試所有的一切共同的特性:測試的目的是發(fā)現(xiàn)軟件中存在的缺陷并且及時的修改,從而提升軟件產(chǎn)品的質(zhì)量。
5結(jié)束語
unity3d是一款功能非常強大的游戲設計軟件,包含了很多重要的技術(shù)。該文只是對其中兩種技術(shù)作了簡單的介紹。
參考文獻:
[1]宣雨松.Unity3D游戲開發(fā)[M].北京:人民郵電出版社,2012.