Post on 07-Aug-2020
中華大學資訊工程學系
103 學年度專題報告
動作角色扮演遊戲(ARPG)
3D遊戲實作
專題成員:
黃珮雯(B10002057)
古珮均(B10002001)
陳郁儒(B10002088)
指導老師:張欽智
中 華 民 國 1 0 4 年 1 月
i
目錄
一、摘要 .............................................................................................................. 1
二、研究目的 ...................................................................................................... 1
三、設計方法及進行方式 .................................................................................. 2
1. 遊戲架構 ........................................................................................................................ 2
1.1流程圖 ......................................................................................................................... 2
1.2遊戲操控方式 .......................................................................................................... 2
2. 地圖設計 ........................................................................................................................ 3
2.1 地形創建 ................................................................................................................... 3
2.2 光線 ............................................................................................................................ 4
2.3 風 ................................................................................................................................. 5
2.4 天空盒 ....................................................................................................................... 5
2.5 水 ................................................................................................................................. 6
3. 介面設計 ........................................................................................................................ 7
3.1 GUI ............................................................................................................................. 7
3.2 NGUI .......................................................................................................................... 8
3.3 小地圖 ..................................................................................................................... 11
4. 音效音樂 ...................................................................................................................... 13
四、程式設計 .................................................................................................... 15
1. 碰撞偵測 ...................................................................................................................... 15
2.1 射線碰撞(Physics.Raycast)函式 ..................................................................... 15
2.2 Trigger 觸發器 ...................................................................................................... 15
2. 角色控制 ...................................................................................................................... 16
2.1 角色控制器 (Character Controller) ............................................................... 16
2.2 角色移動控制腳本(c#) ...................................................................................... 16
2.3 角色攻擊腳本 ....................................................................................................... 16
3. 怪物 AI .......................................................................................................................... 18
五、研究成果展示 ............................................................................................ 19
六、結論 ............................................................................................................ 21
七、工作進度表 ................................................................................................ 21
八、工作分配 .................................................................................................... 21
參考文獻 ............................................................................................................ 22
ii
圖目錄
圖 1 遊戲流程圖 .......................................................................................................... 2
圖 2地形產生器 ........................................................................................................... 3
圖 3第一關地形圖 ....................................................................................................... 3
圖 4放入光前 ............................................................................................................... 4
圖 5放入光後 ............................................................................................................... 4
圖 6放入後背光處有陰影 ........................................................................................... 5
圖 7加入風後對樹木的影響 ....................................................................................... 5
圖 8加入天空盒後 ....................................................................................................... 6
圖 9左為會波動的,右為不會動的 ........................................................................... 6
圖 10瀑布呈現 ............................................................................................................. 7
圖 11血條及魔力的呈現 ............................................................................................. 8
圖 12被攻擊時扣血及使用技能扣魔力值 ................................................................. 8
圖 13人物頭像 ............................................................................................................. 8
圖 14建立 SENCES的 LAYER ....................................................................................... 9
圖 15遊戲主畫面 ......................................................................................................... 9
圖 16關卡選擇畫面(每個圖案即為按鈕) ................................................................ 10
圖 17第一關 關卡資訊 ............................................................................................. 10
圖 18第二關 關卡資訊 ............................................................................................. 10
圖 19第三關 關卡資訊 ............................................................................................. 11
圖 20角色頭頂攝影機架設 ....................................................................................... 11
圖 21渲染材質(RENDER TEXTURE)設定 ................................................................... 12
圖 22主攝影機及 QUAD架設 ................................................................................... 12
圖 23小地圖實際呈現 ............................................................................................... 13
圖 24第一關介面整體呈現 ....................................................................................... 13
圖 25角色、怪物的音效放置 ................................................................................... 13
圖 26 AUDIO LISTENER(聆聽器) .................................................................................. 13
圖 27放置在角色身上的 AUDIO SOURCE(聲音源),以對數衰減呈現 ................... 14
圖 28放置在角色身上的 AUDIO SOURCE(聲音源),以線性衰減呈現 ................... 14
圖 29瀑布放置的 AUDIO SOURCE ............................................................................. 15
圖 30怪物 AI流程圖 ................................................................................................. 18
圖 31戰鬥 ................................................................................................................... 19
圖 32女劍士攻擊 ....................................................................................................... 19
iii
圖 33狼人攻擊 ........................................................................................................... 19
圖 34玩家死亡 ........................................................................................................... 20
圖 35贏得勝利跳出接關選擇 ................................................................................... 20
圖 36打贏最終魔王贏得勝利 ................................................................................... 20
1
一、 摘要
本專題主要內容為以 Unity 3D 來製作一款動作角色扮演遊戲。在本遊
戲中共有三個場景,森林、沙漠跟墓園,玩家可從三個場景中擇一來進行遊
戲,隨著玩家所選的場景不同,所能扮演的角色也有所不同,角色跟場景是
綁定的,分別有女劍士、狼人跟刺客。遊戲中的每個場景都有一隻最終魔王,
玩家必須扮演場景中的主角進行冒險,並擊破魔王,來贏得勝利。
二、 研究目的
遊戲一直是個令人著迷的存在,不管男女老幼或是各個年齡層的人,很
多人都沉迷於其中,而我自然也是拜倒其下,身為資深遊戲玩家的我們,對
於遊戲設計一直抱持著憧憬跟嚮往,所以希望能利用專題的機會,運用在學
所學的知識,並透過 Unity 3D這套遊戲引擎,來設計出一款遊戲。
說到遊戲設計不能不提的就是遊戲引擎,在各式遊戲引擎中我們選擇
Unity 3D來學習並開發,相信有在接觸遊戲的人一定對Unity 3D並不陌生,
Unity 3D 是一個用於創造空間視覺化、建築可視化、三維視訊遊戲、即時
3D 動畫等類型的互動內容的綜合型創作工具。Unity 3D 可以運行在
Windows 和 Mac OS X 作業系統下,並具有跨平台性質可發布遊戲至
Windows、Mac、Android、Wii、iPhone、PS3、Xbox360、Flash…等多種平
台。許多主流的 3D建模軟體也都有支援Unity 3D,像 3ds Max、Maya、Blender、
Cinema 4D、Cheetah 3D…等。並擁有自有商店( Union ),能找到相當多的第
3方外掛,Unity 3D 本身也支援多種腳本語言( JavaScript、C#、BOO ),簡
單易操作的圖形化編輯器使得在操作上也較容易上手,在國內外都有不少遊
戲廠商使用 Unity 3D 來開發,Unity 3D是未來遊戲開發這領域的趨勢,所
以我們選擇學習這套遊戲引擎,並藉由實作一款遊戲,來熟習 Unity 3D 這
套開發軟體跟遊戲開發實際的流程。
2
三、 設計方法及進行方式
1. 遊戲架構
1.1流程圖
圖 1 遊戲流程圖
1.2遊戲操控方式
移動:W(前進)、S(後退)、A(向左)、D(向右)
3
攻擊:H(普通攻擊)、J(技能一)、K(技能二)
跳躍:空白鍵
2. 地圖設計
2.1 地形創建
Unity所提供的地形產生器可以有隆起、下陷、種植草樹木、貼圖(材
質)和調整需要的地形的平滑度,即可依據想要的場景去做呈現。
圖 2地形產生器
第一關為森林場景,大多的樹木及草地為內建的地形產生器所製造,
但因產生器內的樹木種類不多,少部分的樹為額外的插入模組。
圖 3第一關地形圖
4
2.2 光線
點光源(Point lights)從同樣的位置在所有方向發光,從一個位置
向四面八方發出光線,就像一盞燈。
方向光源(平行光 Directional lights)被放置在無窮遠的地方,影
響場景的所有物體,就像太陽
聚光燈(Spot lights)從一個點的方向發光,僅照亮物體錐內-就像
汽車的頭燈聚光燈灯光
圖 4 放入光前
圖 5 放入光後
5
圖 6放入後背光處有陰影
2.3 風
圖 7加入風後對樹木的影響
2.4 天空盒
場景中的天空效果運用 Unity內建的天空盒(Skybox),天空盒
為一個六面的正方體,每一面可貼上不同貼圖再將場景包覆其中。
6
圖 8加入天空盒後
2.5 水
地圖中河川、湖泊的水是運用內建的水物件,依據所需的顏色
及大小可做調整。
圖 9左為會波動的,右為不會動的
7
圖 10 瀑布呈現
3. 介面設計
3.1 GUI
Graphical User Interface(GUI)為圖形使用者介面,屬於 Unity裡面的內建
介面系統,通過在 GUI控制的能創建遊戲中的操作。在此專題中用 GUI方
式呈現的有 HP(血量)及MP(魔力值),把主要角色腳本中血量及魔力的參數
傳進 GUI的程式,呈現在遊戲畫面上,並設置。
HP 程式碼:
void Update(){
AddjustCurrentHealth(0);//不斷更新血量長度
}
void OnGUI(){
GUI.Box (new Rect (Screen.width / 8 , Screen.height/16,(Screen.width
/ 2 / (PLAYER_MAXLIFE / PLAYER_MAXLIFE))/2, 20), " ");//HP
底色
GUI.DrawTexture (new Rect(Screen.width /
8,Screen.height/16,hpbarlength,20),hp_img);//HP 血量顯示
GUI.color = Color.black;//label 顏色
GUI.Label (new Rect (Screen.width / 8,
Screen.height/16 ,Screen.width / 2 / (PLAYER_MAXLIFE /
PLAYER_MAXLIFE ), 20), "HP:" + PLAYER_CURRENT_LIFE +
"/" + PLAYER_MAXLIFE);//HP 數字顯示
}
public void AddjustCurrentHealth(int adj){
PLAYER_CURRENT_LIFE += adj;
8
hpbarlength = (Screen.width / 4) * (PLAYER_CURRENT_LIFE /
(float)PLAYER_MAXLIFE);//HP 長度運算
}
圖 11血條及魔力的呈現
圖 12被攻擊時扣血及使用技能扣魔力值
3.2 NGUI
Nxet-Gen User Interface(NGUI)屬於 Unity的外掛 UI製作,提供彈性化
的事件系統,與 Unity屬性編輯器完全整合,編輯 UI時不需進入遊戲模式
(Play mode)也可以及時檢視 UI的外觀。整個 UI只會使用一個 draw call,遊
戲執行時僅占用極少的系統資源。遊戲中運用於人物頭像及介面場景切換,
在 Unity中能把所有用的場景(Sences)以 Layer 的概念做分層,再透過 NGUI
的 Button 的 Click 事件去點擊觸發,連結到各個 Layer即為透過 Layer 連到
各個場景。
程式碼:
Application.LoadLevel (0);
轉換場景,括號內數字即為設定的移轉階層值。
圖 13人物頭像
9
圖 14建立 Sences 的 Layer
圖 15遊戲主畫面
10
圖 16關卡選擇畫面(每個圖案即為按鈕)
圖 17第一關 關卡資訊
圖 18第二關 關卡資訊
11
圖 19第三關 關卡資訊
3.3 小地圖
遊戲中右上方的小地圖是用 Unity內建的攝影機(Camera)及渲染材質
(Render Texture)去做結合,架設一 Camera在角色的正上方;Camera 影像的
目標放在 Render Texture中,會讓 Camera所照到的東西變成一個單純材質。
再把 Render Texture附加在主攝影機(main Camera)正前方的平面上(Quad),
讓 main camera在執行遊戲時一同照到 Quad 呈現出小地圖的樣子。
圖 20角色頭頂攝影機架設
12
圖 21渲染材質(Render Texture)設定
圖 22主攝影機及 Quad 架設
13
圖 23小地圖實際呈現
圖 24第一關介面整體呈現
4. 音效音樂
在 Unity中要播放音效需要兩種組件,一是 Audio Source(聲音源)負責播
放聲音;二是 Audio Listener(聆聽器)負責接收聲音。Audio Listener 是放置在
主攝影機上,讓聲音能跟著攝影機一起移動。Audio Source則是有兩種放置方
式,其一為放置在不會移動的物體上例如:河川、瀑布、樹林……等,讓角
色接近到該物體附近才接收到聲音,而聲音產生方式是以線性方式呈現,即
為越接近該物體聲音越大聲;其次為放置在角色及怪物身上,透過程式控制,
在觸發攻擊事件時產生所配合的音效。
程式碼:
public AudioSource attack_voice;音效宣告
attack_voice.Play();音效播放
圖 25角色、怪物的音效放置
圖 26 Audio Listener(聆聽器)
14
圖 27放置在角色身上的 Audio Source(聲音源),以對數衰減
呈現
圖 28放置在角色身上的 Audio Source(聲音源),以線性衰減
呈現
15
圖 29瀑布放置的 Audio Source
藍色圓圈為能聽到聲音的範圍越靠近圓心聲音越大
四、 程式設計
1. 碰撞偵測
2.1 射線碰撞(Physics.Raycast)函式 static function Raycast (origin : Vector3, direction : Vector3, out
hitInfo : RaycastHit, distance : float = Mathf.Infinity, layerMask : int =
kDefaultRaycastLayers) : bool
origin : 射線的起點
direction : 射線的方向
hitInfo :如果有觸發碰撞,則會記錄碰撞到的碰撞器訊息
distance : 射程
layerMask : 只選定 Layermask 層內的碰撞器,其它層內碰撞器忽
略
2.2 Trigger觸發器
不會受到重力等物理作用力影響,雙方物體會直接穿越,就只
能判斷觸發,但自身還是可以受到程式位移或旋轉,在觸發時會執
行 OnTrigger 事件,事件又細分為 OnTriggerEnter、OnTriggerStay、
OnTriggerExit
Enter事件表示當兩個物件接觸的瞬間,會執行一次這個事件;
Stay事件表示當兩個物件持續接觸時,會不斷執行這個事件;
Exit 事件表示當兩個物件分開的瞬間,會執行一次這個事件。
設置方式:取消所有物理碰撞,在雙方都有碰撞器,並且至少動的
一方有剛體。
16
2. 角色控制
2.1 角色控制器 (Character Controller)
大致有兩種方法,角色控制器跟剛體,在遊戲世界中的角色控制在
物理上是不現實的,角色每小時奔跑 90 英里,立即停止並在極小
空間中轉彎。因為它如此不現實,所以使用剛體(Rigidbody) 和物
理創建此行為不切實際且感覺不正常。所以 Unity提供了角色控制
器,是從腳本獲知在某個方向上移動的膠囊形碰撞體(Collider) 。
該控制器隨後執行移動,但是受碰撞約束。另一方面,如果希望玩
家角色受物理影響,則使用剛體(Rigidbody) 會比角色控制器
(Character Controller) 更好。
2.2 角色移動控制腳本(c#)
以向前為例:
if(Input.GetKey (KeyCode.W)){ //偵測是否按下 W 向前移動
MOVE_DIRECTION = 1; //向前移動(用來判斷移動方向)
MOVE_SPEED = MOVE_DIRECTION * WALK_SPEED; //設
定移動速度變數
player_animation.CrossFade("Walk"); //播放行走動畫
if (Input.GetButton ("Run")){ //如果按下奔跑鍵
MOVE_SPEED *= RUN_SPEED; //速度變數*奔跑速
度
player_animation.CrossFade("Run00");
//播放奔跑動畫
}
}
player_controller.SimpleMove(player_forward * MOVE_SPEED);
//將計算完的移動參數,傳入角色控制函數進行移動
2.3 角色攻擊腳本
if(Input.GetKey(KeyCode.H)){ //偵測是否按下攻擊鍵
//設定射線方向
PLAYER_Forward =
player_transform.TransformDirection(Vector3.forward);
//利用射線
if(Physics.Raycast(player_transform.position+Vector3.up+Vector
3.up,PLAYER_Forward,out PLAYER_Hit,MONSTER_layerMask)){
//播放攻擊動畫
player_animation.CrossFadeQueued("Attack01", 0.05f,
QueueMode.PlayNow);
//獲取當前攻擊對象,並調用改變血量的腳本
17
m_damageTarget =
PLAYER_Hit.collider.gameObject.GetComponent<BattleChange>();
//將攻擊力參數傳入改變血量的腳本,讓被攻擊的敵人
扣血
m_damageTarget.Damage(PLAYER_ATTACK);
}
//實例化攻擊的粒子動畫
Instantiate(player_attackParticle,NowAttackTarget.transform.position+
Vector3.up,Quaternion.identity);
}
18
3. 怪物 AI
圖 30怪物 AI流程圖
19
五、 研究成果展示
圖 31戰鬥
圖 32女劍士攻擊
圖 33狼人攻擊
20
圖 34玩家死亡
圖 35贏得勝利跳出接關選擇
圖 36打贏最終魔王贏得勝利
21
六、 工作進度表
8 月 9 月 10 月 11 月 12 月 1 月
預定計畫 ● ●
收集資料 ● ● ● ●
熟悉 Unity ● ● ● ●
地圖創建 ● ● ● ● ●
角色動作 ● ● ●
怪物 AI ● ● ● ●
介面設計 ● ● ● ●
音樂音效 ●
測試修改 ●
報告 ●
七、 工作分配
黃珮雯:程式設計、角色控制、怪物 AI、遊戲測試、資料收集
古珮均:地圖設計、怪物模組、海報製作、遊戲測試、資料收集
陳郁儒:介面設計、音樂音效、簡報製作、報告撰寫、遊戲測試、影片製作
八、 結論
近幾年來遊戲產業蓬勃發展,從電腦、TV主機、掌機、網頁到手機,遊戲可
說是無所不在,後來因為網路的興起,使得遊戲變化更多,但實際去了解遊戲設
計的人並不多,身為資深遊戲玩家又唸資工系的我們,對於遊戲設計一直有所嚮
往,從一年級我們就有談論過,希望大學四年間可以寫出一款屬於我們的遊戲,
所以專題我們決定學習 Unity來開發一款動作角色扮演遊戲,由於我們都沒有上
過遊戲設計相關的課,也沒摸過相關的軟體,所以一開始真的很辛苦,必須重頭
學習,但途中有些成品出來後,確實有不小的成就感,在專題進行過程中,我們
也體會到遊戲開發的辛苦,像是模型動畫的製作、程式跟畫面如何配合、介面音
效設計…等,還好組員之間十分團結,共同協幫助對方助解決問題,我們才有這
樣的成果, 這次專題感謝張欽智老師認同我們的想法,並從中協助鼓勵我們完
成此次專題,未來我們也會繼續學習下去,希望能繼續往這條路前進。
22
參考文獻
[1] 謝忠和,全民做遊戲-Unity跨平台遊戲開發進階寶典,佳魁資訊,2014年8月
[2] 邱勇標,Unity 3D 遊戲設計實戰,碁峯資訊,2014年 2月
[3] 楊東華,Unity跨平台 3D全方位遊戲設計,碁峯資訊,2014年 4月
[4] Unity Technologies, Unity web site, http://docs.unity3d.com/ScriptReference/,
Unity,2014