林昕
摘 要:目前,作為3D游戲開發引擎和工具,Unity3D以其跨平臺和易用性等特性,被越來越多的公司所使用,并逐步成為開發首選工具。本文對Unity3D工具的基本使用做簡介,并通過構建一個簡單的3D游戲過程,介紹Unity3D在Android游戲開發中的應用,同時指出了該工具的廣闊應用。
關鍵詞:Unity3D;Andoird;游戲開發
一、引言
Unity3D是由Unity Technologies開發的一個讓開發者創建三維游戲、建筑可視化、實時三維動畫等類型互動內容的跨平臺的游戲開發工具,是一個整合度很高的專業游戲引擎。Unity可運行在Windows 和Mac OS X下,可發布游戲至Windows、Mac、Wii、iPhone和Android平臺,支持Mac 和Windows的網頁瀏覽。由于Unity3D的跨平臺和易用性等特性被越來越多的游戲開發公司所重視,并逐漸成為3D游戲開發的首先工具。
二、Unity3D界面介紹
Unity3D的基本界面層次清晰,幾個窗口實現了全部的編輯功能。主界面如圖1所示:
場景面板:該面板為Unity3D的編輯面板或者說是工作區;開發者可以將所有的模型、燈光、以及其他材質對象拖放到當前場景中,構建游戲中所能呈現的景象。
動畫面板:該面板可以呈現完整的動畫效果。顯示的內容取決于場景攝像機的設置。當游戲在場景面板中編輯好后,點擊運行按鈕,即可在動畫面板中查看游戲的實際運行效果。
■
項目面板:該面板主要功能是顯示該項目文件中的所有資源列表。除了模型、材質、字體等,還包括該項目的各個場景文件。開發者可以將游戲中使用到的所有資源導入到該面板中,使用時只要用鼠標拖動到場景面板即可。
層次面板:該面板主要功能是顯示放在場景面板中的所有的物體對象。該面板可以清楚查看在場景面板中出現的所有對象,很方便對場景中的對象進行管理。
對象屬性欄:又叫檢視面板,該面板欄會呈現出任何對象的屬性和組件,包括三維坐標、旋轉量、縮放大小、腳本的變量和對象等。
場景調整工具:可以改變在編輯過程中的場景視角、物體世界坐標和本地坐標的更換、物體的法線中心的位置,以及物體在場景中的坐標位置、縮放大小等。
三、接雞蛋游戲的制作流程
一款手機游戲的開發大致經歷立項、制定策劃大綱、制作游戲、檢測調試等過程。本文以接雞蛋這個小游戲為例,描述Unity3D開發Andoird游戲的基本流程。
游戲的基本玩法是雞蛋從屏幕上方落下,通過左右移動屏幕下方的木桶接住從上方落下的雞蛋,雞蛋落到木桶中及得分。游戲開發的基本步驟如下:
1.新建工程和場景
一個游戲就是一個項目,一個關卡就是一個場景,在Unity3D的文件菜單中選擇新建項目,為新項目命名,如圖2所示,新建項目的同時會新建第一個場景,保存新場景。
■
2.導入資源
游戲使用到的資源主要包括游戲對象模型、材質、貼圖、聲音等,模型可以在Maya,3DMax等3D建模工具中做好,導出為FBX格式的文件,然后在Unity3D的項目面板中選擇導入資源菜單導入游戲資源。接雞蛋主要模型資源有木桶、雞蛋、草地、白云等模型。
3.搭建游戲場景
將游戲資源從項目面板拖入到場景面板中進行游戲場景的搭建,通過移動、縮放、旋轉等工具將游戲資源對象按照一定的空間順序進行搭建,最終效果如圖3所示:
■
4.編寫游戲腳本
(1)桶移動:PlayerScript.cs
木桶的左右移動是通過PlayerScript.cs來控制的,Unity3D的輸入系統定義了水平方向的移動,并將X方向的數值限定在-2.5到2.5之間,這樣避免木桶超出屏幕范圍,代碼的主要部分如下:
void Update () {
float moveInput = Input.GetAxis("Horizontal") * Time.deltaTime * 3; // 木桶在水平方向移動
transform.position += new Vector3(moveInput, 0, 0);
if (transform.position.x <= -2.5f || transform.position.x >= 2.5f){ // 限制木桶的移動范圍
float xPos = Mathf.Clamp(transform.position.x, -2.5f, 2.5f); // 木桶在-2.5和2.5之間移動
transform.position = new Vector3(xPos, transform.position.y, transform.position.z);
}}
將PlayerScript.cs拖至木桶對象上,使得其成為木桶對象的腳本組件。
(2)雞蛋落下:EggScript.cs
雞蛋落下由EggScript.cs來控制,當雞蛋落至屏幕下方足夠低的地方的時候,雞蛋自動銷毀,以免占有資源,代碼主要部分如下:
void Update () {
float fallSpeed = 2 * Time.deltaTime;
transform.position -= new Vector3(0, fallSpeed, 0);
if (transform.position.y < -1 || transform.position.y >= 20) // 位置足夠低的時候銷毀對象
{Destroy(gameObject);}}
同樣將EggScript.cs拖至雞蛋對象上,使得其成為雞蛋對象的腳本組件之一。
(3)生成雞蛋:SpawnerScript.cs
雞蛋源源不斷的從屏幕上方落下,即是通過SpawnerScript.cs腳本來生成雞蛋,并且每隔0.3秒,雞蛋的生成速度會不斷的增加,主要代碼如下:
void Update () {
if (nextEggTime < Time.time)
{
SpawnEgg();
nextEggTime = Time.time + spawnRate;
spawnRate *= 0.98f; // 生成速度逐漸加快
spawnRate = Mathf.Clamp(spawnRate, 0.3f, 99f);
}}
void SpawnEgg()
{
float addXPos = Random.Range(-1.6f, 1.6f); // 水平位置由隨機函數產生的數值來生成
Vector3 spawnPos = transform.position + new Vector3(addXPos,0,0);
Instantiate(eggPrefab, spawnPos, Quaternion.identity); // 初始化雞蛋
}
同樣將EggScript.cs拖至雞蛋對象上,也使得其成為雞蛋對象的腳本組件之一。
(4)碰撞檢測,計分:EggCollider.cs
在木桶底部有一個球體對象,設置為碰撞器,來檢測雞蛋是否與其發生碰撞,或者說來判斷木桶是否接到了雞蛋,如果碰撞到則進行計分,代碼主要部分如下:void Awake()
void OnTriggerEnter(Collider theCollision) // 碰撞檢測
{
GameObject collisionGO = theCollision.gameObject;
Destroy(collisionGO);
myPlayerScript.theScore++;// 本游戲中碰撞的物體只可能是雞蛋,檢測到即銷毀雞蛋對象,同時計分
}
將EggCollider.cs拖至球體碰撞器對象上,也使得其成為碰撞器對象的腳本組件。
5.發布游戲
游戲代碼完成,測試無錯后就可以發布成Android應用程序了,選擇文件菜單>構建設置,在彈出的對話框中可以看見我們的游戲可以發布到多個平臺上,這里我們選擇Android,如圖4所示:
■
在發布設置中,設置游戲名稱、默認圖標、Android版本等基本信息,最后點擊構建按鈕即可生成最終的Andoid打包文件,導入手機中就可以運行了。
四、結束語
本文通過一個小游戲的制作過程,描述了Unity3D的基本界面、基本操作和使用Unity3D開發游戲的基本流程。Unity3D不但可以開發3D游戲還可以開發2D游戲和其他大型網絡在線游戲,同樣是畫面絢麗,效果出眾。
做為一個成熟的游戲引擎和開發工具,Unity3D其開發能力毋庸置疑,隨著iOS,Android手機的大量普及和3D網頁游戲的興起,Unity3D因其強大的功能、良好的可移植性和易用性在手機游戲和網頁游戲平臺上必將得到了廣泛的使用和傳播。
參考文獻:
[1]Ryan Henson Creighton.Unity 3D Game Development by[J].Example Beginners Guide,2010(9).
[2]金璽曾.Unity 3D手機游戲開發[M].北京:清華大學出版社,2013.
if (transform.position.y < -1 || transform.position.y >= 20) // 位置足夠低的時候銷毀對象
{Destroy(gameObject);}}
同樣將EggScript.cs拖至雞蛋對象上,使得其成為雞蛋對象的腳本組件之一。
(3)生成雞蛋:SpawnerScript.cs
雞蛋源源不斷的從屏幕上方落下,即是通過SpawnerScript.cs腳本來生成雞蛋,并且每隔0.3秒,雞蛋的生成速度會不斷的增加,主要代碼如下:
void Update () {
if (nextEggTime < Time.time)
{
SpawnEgg();
nextEggTime = Time.time + spawnRate;
spawnRate *= 0.98f; // 生成速度逐漸加快
spawnRate = Mathf.Clamp(spawnRate, 0.3f, 99f);
}}
void SpawnEgg()
{
float addXPos = Random.Range(-1.6f, 1.6f); // 水平位置由隨機函數產生的數值來生成
Vector3 spawnPos = transform.position + new Vector3(addXPos,0,0);
Instantiate(eggPrefab, spawnPos, Quaternion.identity); // 初始化雞蛋
}
同樣將EggScript.cs拖至雞蛋對象上,也使得其成為雞蛋對象的腳本組件之一。
(4)碰撞檢測,計分:EggCollider.cs
在木桶底部有一個球體對象,設置為碰撞器,來檢測雞蛋是否與其發生碰撞,或者說來判斷木桶是否接到了雞蛋,如果碰撞到則進行計分,代碼主要部分如下:void Awake()
void OnTriggerEnter(Collider theCollision) // 碰撞檢測
{
GameObject collisionGO = theCollision.gameObject;
Destroy(collisionGO);
myPlayerScript.theScore++;// 本游戲中碰撞的物體只可能是雞蛋,檢測到即銷毀雞蛋對象,同時計分
}
將EggCollider.cs拖至球體碰撞器對象上,也使得其成為碰撞器對象的腳本組件。
5.發布游戲
游戲代碼完成,測試無錯后就可以發布成Android應用程序了,選擇文件菜單>構建設置,在彈出的對話框中可以看見我們的游戲可以發布到多個平臺上,這里我們選擇Android,如圖4所示:
■
在發布設置中,設置游戲名稱、默認圖標、Android版本等基本信息,最后點擊構建按鈕即可生成最終的Andoid打包文件,導入手機中就可以運行了。
四、結束語
本文通過一個小游戲的制作過程,描述了Unity3D的基本界面、基本操作和使用Unity3D開發游戲的基本流程。Unity3D不但可以開發3D游戲還可以開發2D游戲和其他大型網絡在線游戲,同樣是畫面絢麗,效果出眾。
做為一個成熟的游戲引擎和開發工具,Unity3D其開發能力毋庸置疑,隨著iOS,Android手機的大量普及和3D網頁游戲的興起,Unity3D因其強大的功能、良好的可移植性和易用性在手機游戲和網頁游戲平臺上必將得到了廣泛的使用和傳播。
參考文獻:
[1]Ryan Henson Creighton.Unity 3D Game Development by[J].Example Beginners Guide,2010(9).
[2]金璽曾.Unity 3D手機游戲開發[M].北京:清華大學出版社,2013.
if (transform.position.y < -1 || transform.position.y >= 20) // 位置足夠低的時候銷毀對象
{Destroy(gameObject);}}
同樣將EggScript.cs拖至雞蛋對象上,使得其成為雞蛋對象的腳本組件之一。
(3)生成雞蛋:SpawnerScript.cs
雞蛋源源不斷的從屏幕上方落下,即是通過SpawnerScript.cs腳本來生成雞蛋,并且每隔0.3秒,雞蛋的生成速度會不斷的增加,主要代碼如下:
void Update () {
if (nextEggTime < Time.time)
{
SpawnEgg();
nextEggTime = Time.time + spawnRate;
spawnRate *= 0.98f; // 生成速度逐漸加快
spawnRate = Mathf.Clamp(spawnRate, 0.3f, 99f);
}}
void SpawnEgg()
{
float addXPos = Random.Range(-1.6f, 1.6f); // 水平位置由隨機函數產生的數值來生成
Vector3 spawnPos = transform.position + new Vector3(addXPos,0,0);
Instantiate(eggPrefab, spawnPos, Quaternion.identity); // 初始化雞蛋
}
同樣將EggScript.cs拖至雞蛋對象上,也使得其成為雞蛋對象的腳本組件之一。
(4)碰撞檢測,計分:EggCollider.cs
在木桶底部有一個球體對象,設置為碰撞器,來檢測雞蛋是否與其發生碰撞,或者說來判斷木桶是否接到了雞蛋,如果碰撞到則進行計分,代碼主要部分如下:void Awake()
void OnTriggerEnter(Collider theCollision) // 碰撞檢測
{
GameObject collisionGO = theCollision.gameObject;
Destroy(collisionGO);
myPlayerScript.theScore++;// 本游戲中碰撞的物體只可能是雞蛋,檢測到即銷毀雞蛋對象,同時計分
}
將EggCollider.cs拖至球體碰撞器對象上,也使得其成為碰撞器對象的腳本組件。
5.發布游戲
游戲代碼完成,測試無錯后就可以發布成Android應用程序了,選擇文件菜單>構建設置,在彈出的對話框中可以看見我們的游戲可以發布到多個平臺上,這里我們選擇Android,如圖4所示:
■
在發布設置中,設置游戲名稱、默認圖標、Android版本等基本信息,最后點擊構建按鈕即可生成最終的Andoid打包文件,導入手機中就可以運行了。
四、結束語
本文通過一個小游戲的制作過程,描述了Unity3D的基本界面、基本操作和使用Unity3D開發游戲的基本流程。Unity3D不但可以開發3D游戲還可以開發2D游戲和其他大型網絡在線游戲,同樣是畫面絢麗,效果出眾。
做為一個成熟的游戲引擎和開發工具,Unity3D其開發能力毋庸置疑,隨著iOS,Android手機的大量普及和3D網頁游戲的興起,Unity3D因其強大的功能、良好的可移植性和易用性在手機游戲和網頁游戲平臺上必將得到了廣泛的使用和傳播。
參考文獻:
[1]Ryan Henson Creighton.Unity 3D Game Development by[J].Example Beginners Guide,2010(9).
[2]金璽曾.Unity 3D手機游戲開發[M].北京:清華大學出版社,2013.