2013年9月8日 星期日

Unity3D 教學 ﹥10 創造 3D 遊戲角色

http://www.cg.com.tw/Unity/htm/Unity_010.asp

關於角色控制器
角色控制器 ( Character Controllers ) 是 Unity 內建的資源包,簡單的說就是遊戲中玩家可以操控的角色。建立新的遊戲專案時只要匯入 Character Controller.unityPackage 資源包,稍後就可以從專案視窗拖曳到場景中使用,或是將控制腳本套用到您製作的人物角色。
我們先學習使用 Unity 內建的角色控制器,稍後再介紹如何創造自已的 3D 遊戲角色。
建立一個新的遊戲專案,匯入 Character Controller.unityPackage 角色控制器資源包、Skyboxes 天空方塊資源包、Terrain 地形資源包。

Unity 內建的角色控制器可分為「第一人稱控制器」與「第三人稱控制器」:

First Person Controller 第一人稱控制器
第一人稱控制器是由攝影機與膠囊形狀的物件組成,用於製作以玩家為觀點的遊戲(第一人稱射擊遊戲、賽車競速遊戲等)。您可以使用滑鼠拖曳的方式,將角色控制器放到場景中。請注意角色控制器應該移到高於地面的位置,否則在遊戲中將會因為踩不到地面而往下掉落。
注意!遊戲角色如果不停的往下掉落,遊戲就無法繼續進行,您一定可以想像玩家接下來的表情加上摔鍵盤的聲音,所以您應該在地形適當的位置加上障礙物,例如圍牆、護欄、河流,或是使用看不到的隱形圍牆來阻擋遊戲角色。另一種常見的設計是讓玩家可以跑出邊界而掉下去,但是通常也會扣掉一些玩家的血量或隻數做為懲罰。

Movement 遊戲角色的移動設定
  • Max Forward Speed 向前移動的最快速度(預設值 6)。
  • Max Sideward Speed 左右移動的最快速度(預設值 6)。
  • Max Backwards Speed 向後移動的最快速度(預設值 6)。
  • Slope Speed Multiplier。
  • Max Ground Acceleration 最大地面加速度(預設值 20)。
  • Max Air Acceleration 最大空中加速(預設值 15)。
  • Gravity 重力(預設值 20)。
Jumping 遊戲角色的跳躍設定
  • Enabled 勾選時遊戲角色擁有跳躍的能力。
  • Base Height(預設值 1)
  • Extra Height(預設值 1)
  • Perp Amount(預設值 1)
  • Steep Perp Amount(預設值 0.5)
Moving Platform
  • Enabled(預設為開啟狀態)
  • Movement Transfer(預設值 PermaTransfer)
Sliding
  • Enabled(預設為開啟狀態)
  • Sliding Speed(預設值 10)
  • Sideways Control(預設值 1)
  • Speed Control(預設值 0.4)
執行遊戲播放的過程,您可以透過屬性檢視調整角色控制器的參數,而且可以立即比較參數調整的差異,Unity 遊戲引擎的這項設計,可以讓您很容易地調整到適當的數值。不過請特別注意!停止遊戲的播放時,所有的參數都將還原到播放前的狀態。

遊戲角色若是在有樓梯的建築物,如何讓角色能夠走上樓梯呢?
Slope Limit : Taking into account uphill movement, 此參數允許您指定 How steep an incline can be before the character can no longer walk up the particular incline. By including this parameter, the Character Controller stops the player from simply walking up vertical walls or steep areas of land, which would of curse seem unrealistic。
Step Offset 樓梯(預設值 0.4? )。
Skin Width。
Min Move Distance 最小移動距離。
Center : Set as a Vector3 ( x,y,z 的值)通常是設定為 0 ,此參數較常使用於第三人稱控制器。
Radius。
Height。

3rd Person Controller 第三人稱控制器
第三人稱控制器可用於製作動作遊戲、角色扮演遊戲。Unity 預設的第三人稱控制器是個「工人」的角色。
什麼?你是說這個主角看起來太弱了?沒關係~ 我們只是用來練習而已,更厲害的等一下就出來了。

Animation 動畫。
Play Automatically 自動播放(預設啟用)。
Animate Physics(預設未啟用)。
Culling Type(預設 Based On Renderers)。
Height 高度。

選取第三人稱控制器後,從屬性編輯器找到 Third Person Camera (Script) 元件,這個腳本用於控制攝影機如何跟隨玩家操控的角色。
預設的情況,玩家停止操作時,攝影機會回到定位,也就是遊戲角色後方的位置。
Distance 攝影機與遊戲角色的距離。
Height 攝影機距離地面的高度。
Angular Smooth Lag 攝影機回到定位的延遲時間
Angular Max Speed 攝影機回到定位的最大速度,製作節奏較快的射擊遊戲時,應將數值加大(例如100),否則攝影機尚未回到定位時,玩家很容易因來不及反應而受到敵人的攻擊。

關於 Losing prefab 訊息
角色控制器是 Unity 的預製物件,若是套用自行撰寫的腳本,或是修改原始的腳本時,將會顯示 Losing prefab 的訊息,若是按 Continue 按鈕確認修改,則此預製物件將會失去與來源的連結關係。換個方式來說,修改 Project 專案檢視的原始物件時,不再同步更新此角色控制器。

實際上看到此訊息時,通常是按下 Continue 繼續按鈕,否則也是無法進行必要的操作。其實 Unity 3.5 版本後出現此訊息的頻率已經明顯減少,在較新版本的 Unity 即使對預製物件進行部份的編輯操作,也不會失去與來源的連結關係。

使用自已的遊戲角色
各位已經熟悉 Unity 內建的第一人稱控制器、第三人稱控制器的遊戲角色,您是否想要製作自已的遊戲角色呢?
遊戲角色的創造主要是透過 3ds Max、Maya 等軟體製作模型、設定 材質與 UV 貼圖、套用骨架,並且加入不同的動作(走路、跑步、跳躍、攻擊、防禦、倒地等),此部份請參閱市售的相關書籍,或是本站的 3ds Max 人物角色製作教學。
我們先從 Unity 的 Asset Store 資源商店尋找適當的遊戲角色模型( 關於資源商店與帳號的申請可參閱此教學 )。

範例中是 3D Models 分類的 Base Male,這個人物與 Play Station 3 遊戲平台的 God of War 戰神系列遊戲主角 Kratos 克雷多斯長得有點像。
按下藍色 Download 按鈕,就會開始下載檔案,當檔案下載完成時,將會出現 Importing package 正在匯入資源包的對話框。

按下 Import 按鈕即可匯入到目前編輯的遊戲專案。匯入後 Project 專案視窗將會出現一個 BaseMale 資料夾,在子資料夾擁有的內容是:
3D 資料夾 內含人物角色的 FBX 原始模型檔。
Materials 資料夾 內含人物角色、展示平台、天空方塊的材質。
Prefabs 資料夾 內含人物角色、陰影的預製物件。
Scenes 資料夾 內含一組示範場景,展示此人物角色的所有動作。
Scripts 資料夾 內含示範場景用的腳本程式。
Textures 資料夾 內含人物角色、展示平台、天空方塊的紋理貼圖。
您可以先開啟 Scenes 資料夾的 scene 場景,並按下播放按鈕進入遊戲,可以檢視人物的不同動作,還可以切換膚色喔!

想瞭解遊戲角色為什麼可以做出不同的動作嗎?請開啟 3D 資料夾,即可看到以下 FBX 檔案,分別記錄不同的動作。
baseMale.fbx
baseMale@crouch.fbx
baseMale@crouchRun.fbx
baseMale@crouchStrafeLeft.fbx
baseMale@crouchStrafeRight.fbx
baseMale@crouchWalk.fbx
baseMale@idle.fbx
baseMale@jump.fbx
baseMale@run.fbx
baseMale@sprint.fbx
baseMale@strafeLeft.fbx
baseMale@strafeRight.fbx
baseMale@walk.fbx
接著將人物放到遊戲場景中,使用滑鼠拖曳,將 BaseMale > Prefabs 資料夾的 baseMale 拖曳到場景的原點,讓人物站在地面上。

點選功能表 [ Component > Scripts > Third Person Controller ] 即可在人物角色加上 Character Controller 角色控制器與 Third Person Controller 第三人稱控制器,按播放鍵測試,人物角色會往下掉,這是因為 Character Controller 角色控制器的碰撞器中心位置低於地面的關係,請將 Center 的 Y 座標位置調高即可。


讓人物角色動起來
注意!遊戲專案需要匯入 Character Controller 資源包,否則將無法找到 Third Person Controller 第三人稱控制器腳本。
選取 baseMale 可以看到屬性編輯器的 Animation 元件,展開 Animations 後可以看到已經設定好的 No animation、Idle、Walk、Run、Sprint、Straft left、Straft right …共 13 組動作,預設的動作是 idle 閒置。
Third Person Controller 只有 Idle 閒置、Walk 走路、Run 跑步、Jump Pose 跳躍,共 4 組動作。

使用鍵盤方向鍵控制人物移動,按下空白鍵可讓人物跳躍。

先選取攝影機,點選功能表 [ Component > Camera-Control > Smooth Follow ] 為攝影機加上 Smooth Follow 平滑跟隨腳本, 並將遊戲角色指定給 Target 目標欄位。若是找不到 Smooth Follow 腳本,可能是沒有遊戲專案沒有匯入 Sceipts 常用腳本資源包,請點選功能表 [ Assets > Import Package > Scripts ] 匯入腳本資源包。