Intermediate course 3
Passionate about VR, AR, and interaction design, I believe in the power of new simulation and that the users' insight behind the images is even more valuable. Keting Pan, Storyteller wanna-be 4
Problem What are the elements of game? 5
3 elements of game 大部分遊戲都會有這三部分組成, 每種遊戲側重點不同從 而有多種效果 Goal 目標是讓這個遊戲有趣的重要組成部分 Chance and skill 幾率和技巧是影響遊戲難度的首要因素 Fun 無論如何有趣都是遊戲設計者需要考慮的 6
場景搭建坦克控制攝像機控制血量條發射的實現雙人遊戲 AR 遊戲 7
8
場景搭建 調整 Layout 打開 Unity 按兩下 TankStartPack package 設置 Layout 為 2 by 3 模式 將 Project 窗口拖拽到 Hierarchy 窗口下麵 設置 Project 的內容視窗顯示比例調至最小 9
場景搭建 导入资源 打開 HK_Intermediate_StartPack.unitypackage Animator 動畫相關 AudioClip 聲音素材 Editor Editor 相關 Fonts 字體文件 Materials 材質 Models 模組 PostProcessing 後處理相關代碼 Prefabs 預製體 Profiles 後處理相關文件 Scripts 代碼 Sprites 小貼圖 10
場景搭建 基本設置 通過 File > New Scene 創建一個空場景 在 Project 窗口下 Asset 資料夾中,, 點擊 Project 的 Create > Folder; 或右鍵 Create > Folder, 創建 _Scenes 以 Main 命名該場景, 並保存至 _Scenes 目錄下 在 Hierarchy 面板中, 刪除 Directional Light 從 TankStartPack> Prefabs 中, 拖拽 Level Art 預設到 Hierarchy 面板上 點擊上方的 Windows 菜單, 打開 Lighting->Setting 面板, 定位到 Inspector 標籤頁旁便於做設置 11
場景搭建 Light Setting 在 Lighting 面板底部, 確認 Auto 為 非勾選狀態 去除 Baked Global Illumination 的勾選 將 Lightmapping setting 下的 Indirect Resolution 的值定為 0.5 12
場景搭建 Generate Light 將 Environment -> Source 從 Skybox 改為 Color 將 Ambient Color 設置為 Hex Color(635571) 點擊 Lighting 面板上的 Generate Lighting 按鈕, 進行創建 13
場景搭建 調整 Camera 選中 Main Camera 物件, 回到 Inspector 面板 修改 Main Camera 的 Position 為 (-43,42,-25) 改變其 Rotation 為 (40,60,0) 修改 Camera 元件選項, 將 Projection 設為 Orthographic 把 Clear Flags 從 Skybox 改為 Solid Color 設置 Background 顏色為 ( 503C3200 ) 保存該場景 14
場景搭建 - 小測試 1. 以下哪個顏色是代表 X 軸的? A) 藍色 ;B) 紅色 ;C) 黃色 ;D) 綠色 2. 在以下哪個面板中, 你能找到場景中的所有遊戲物件? A)Inspector;B)Project;C)Scene;D)Hierarchy 3. 如果你想在 Scene 中創建一個 Prefab 的實例, 你應該從 Project 面板中拖拽到以下哪兩個面板其中的一個? A)Inspector 或 Hierarchy;B)Inspector 或 Scene; C)Scene 或 Hierarchy;D)Game 或 Inspector 1. 以下哪個顏色是代表 X 軸的? A) 藍色 ;B) 紅色 ;C) 黃色 ;D) 綠色 2. 在以下哪個面板中, 你能找到場景中的所有遊戲物件? A)Inspector;B)Project;C)Scene;D)Hierarchy 3. 如果你想在 Scene 中創建一個 Prefab 的實例, 你應該從 Project 面板中拖拽到以下哪兩個面板其中的一個? A)Inspector 或 Hierarchy;B)Inspector 或 Scene; C)Scene 或 Hierarchy;D)Game 或 Inspector 15
16
坦克控制 - 創建 Tank 對象 從 Project > Models, 拖拽 Tank 到 Hierarchy 面板 在 Inspector 頂部, 點擊 Add layers 添加 Players 將 Tank 對象的 Layer 設置為 Players 彈出 Change Layer 對話方塊, 點擊 No,this object only 按鈕 17
坦克控制 添加 Rigidbody 為 Tank 添加 Rigidbody 組件對象 (Component > Physics > Rigidbody 或者 Inspector > Add Component > Physics > Rigidbody ) 展開 Constraints 選項 在 Constraints 下, 勾選 Y 軸的 Freeze Position 選項 勾選 X 軸和 Z 軸的 Freeze Rotation 選項 18
坦克控制 添加 Collider 為 Tank 添加 Box Collider (Component > Physics > Box Collider 或者 Inspector > Add Component > Physics > Box Collider ) 調整 Center 為 (0,0.85,0) 把 Size 設置為 (1.5,1.7,1.6) 19
坦克控制 添加音效 為 Tank 添加 Audio Source 元件物件 (Component > Audio > Audio Source 或者 Inspector > Add Component > Audio > Audio Source ) 點擊 AudioClip 旁的小圓圈按鈕, 選擇 EngineIdle 音效 勾選 Loop 選項 20
坦克控制 添加音效 再為 Tank 添加 Audio Source 元件物件 該 component, 不勾選 Play On Awake 選項 在 Assets 下創建 Prefabs 資料夾 將 Hierarchy 面板中的 Tank 對象, 拖拽到 Prefabs 資料夾中 保存場景 21
坦克控制 添加特效 從 Asset > Prefabs 資料夾中, 拖拽 DustTrail 到 Hierarchy 面板中的 Tank 對象上, 並作為 Tank 的子節點對象 選中 DustTrail 複製一份 ( 快速鍵 :Windows: Ctrl-D;Mac:Command-D), 並分別重命名為 LeftDustTrail 和 RightDustTrail 設置 LeftDustTrail 的 Position 為 (-0.5,0,- 0.75),RightDustTrail 的 Position 為 (0.5,0,- 0.75) 22
坦克控制 把 Asset > Scripts > Tank > TankMovement 腳本, 拖拽到 Hierarchy 面板中 Tank 對象上 TankMovement 需要實現的功能 : 1. 獲取輸入 2. 轉向 3. 前後移動 4. 播放引擎音效 按兩下打開 TankMovement 腳本, 打開 MonoDevelop 腳本編輯器 23
坦克控制 - 引擎音效 回到 Inspector 面板, 將 Tank 上第 1 個 Audio Source 組件, 拖拽到 TankMovement 的 Movement Audio 點擊 Engine Idling 最右的小圓圈, 選擇 Audio Clip 列表中的 EngineIdle 點擊 Engine Driving 最右的小圓圈, 選擇 Audio Clip 列表中的 EngineDriving 點擊 play 啟動預覽 24
坦克控制 - 小測試 以下哪一個元件是在遊戲中播放音效的? A)Audio Source;B)Audio Clip;C)Audio Listener; D)Audio Mixer 以下哪種變數類型可以存儲旋轉資訊 (Rotation)? A)Integer;B)Vector3;C)Transform;D) Quaternion 運行以下代碼後, 剛體的位置會發生什麼情況? 以下哪一個元件是在遊戲中播放音效的? A)Audio Source;B)Audio Clip;C)Audio Listener; D)Audio Mixer 以下哪種變數類型可以存儲旋轉資訊 (Rotation)? A)Integer;B)Vector3;C)Transform;D) Quaternion 運行以下代碼後, 剛體的位置會發生什麼情況? A) 其原位置 Z 軸方向正向移動 10 個單位 ;B) 在原點 ; C) 在座標 (0,0,10) 位置 ;D) 剛體不動 A) 其原位置 Z 軸方向正向移動 10 個單位 ;B) 在原點 ; C) 在座標 (0,0,10) 位置 ;D) 剛體不動 25
26
攝像機控制 - 創建 CameraRig 對象 打開 Unity, 選擇打開 TankGamePhase3 工程 在 Hierarchy 面板, 通過 Create > Create Empty, 創建一個空 GameObject 對象 將其重命名為 CameraRig 點擊 Transform 元件上的齒輪按鈕, 選擇 Reset, 來初始化位置 將 CameraRig 的 Rotation 設置為 (40,60,0) 在 Hierarchy 面板, 將 Main Camera 拖到 CameraRig 下, 作為子節點 設置 Main Camera 的 Position 為 (0,0,-65) 確認 Main Camera 的 Rotation 為 (0,0,0) 27
攝像機控制 - 相機控制實現 找到 Project 面板中,Assets > Scripts > Camera 資料夾 將 CameraControl C# 文件拖拽到, Hierarchy 面板中 CameraRig 對象上 按兩下 Camera Control 組件, 打開 MonoDevelop 查看腳本 28
攝像機控制 - 關聯相機與 Tank 使用 /* */, 注釋 [HideInspector], 使得 Targets 在 Inspector 中可見 保存 CameraControl C# 檔, 等待 Editor 刷新 在 Camera Control 組件上, 設置 Targets 的 Size 為 1, 並將 Hierarchy 中的 Tank 拖拽到 Element 0 上 點擊 play 29
攝像機控制 - Quiz 在 Inspector 介面上, 每個物件都有 Transform 組件, 其中 Position 屬性顯示的是什麼? A) 世界空間位置 ;B) 本地空間位置 ;C) 與其子節點關聯的位置 ;D) 其 Scale 和歐拉角旋轉之間的關係 使用正交相機時, 以下哪種操作會產生放大 (Zoom in) 效果? A) 將 Camera 移動得更近 ;B) 減少 Camera 正交 Size; C) 提高 Camera 正交 Size;D) 提高 Camera 縱橫比值 (aspect); 在 Inspector 介面上, 每個物件都有 Transform 組件, 其中 Position 屬性顯示的是什麼? A) 世界空間位置 ;B) 本地空間位置 ;C) 與其子節點關聯的位置 ;D) 其 Scale 和歐拉角旋轉之間的關係 使用正交相機時, 以下哪種操作會產生放大 (Zoom in) 效果? A) 將 Camera 移動得更近 ;B) 減少 Camera 正交 Size; C) 提高 Camera 正交 Size;D) 提高 Camera 縱橫比值 (aspect); 30
31
血量條 - 確認 Transform 觸發方式 打開 Unity, 選擇打開 TankGamePhase4 工程 在 Scene 視圖上方, Transform 觸發方式按鈕, 確認選擇為 Pivot ( 軸 ), 而不是 Center ( 中心 ) 32
血量條 - ugui 創建血條 打開 Unity, 打開 Prefab 文件夾 將 TankCanvas 拖到 Tank 下方作為子 節點 將 Scripts > Tank 中的 TankHealth 文件, 拖拽到 Tank 對象上 按兩下 TankHealth, 打開 MonoDevelop 33
血量條 - ugui 創建血條 選中 Tank 對象上的 TankHealth 組件, 將 HealthSlider 拖到 Slider 屬性, 將 Fill 拖到 Fill Image 屬性, 將 TankExplosion 拖到 Explosion Prefab 上 點擊 Tank 上的 Apply 按鈕 保存 Main 場景 點擊 Play 預覽 34
血量條 - ugui 創建血條 以下哪個組件是所有 UI 物件所必須的, 但是多數遊戲物件沒有的? A)Canvas;B)Canvas Scaler;C)Rect Transform; D)Event System 要關閉一個 GameObject, 以下哪句語句是正確的? A)gameObject.SetActive(false); B) gameobject.setenabled(false);c) gameobject.enabled = false; D) gameobject.activated = false; 你該如何阻止玩家拖動 Slider 物件產生的值變化? A) 刪除 Handle Slide Area 對象 ; B) 把 Slider 的 Transition 設為 None;C) 刪除 Background 對象 ; D) 在 Slider 組件上取消 Interactable 的勾選 ; 以下哪個組件是所有 UI 物件所必須的, 但是多數遊戲物件沒有的? A)Canvas;B)Canvas Scaler;C)Rect Transform; D)Event System 要關閉一個 GameObject, 以下哪句語句是正確的? A)gameObject.SetActive(false); B) gameobject.setenabled(false);c) gameobject.enabled = false; D) gameobject.activated = false; 你該如何阻止玩家拖動 Slider 物件產生的值變化? A) 刪除 Handle Slide Area 對象 ; B) 把 Slider 的 Transition 設為 None;C) 刪除 Background 對象 ; D) 在 Slider 組件上取消 Interactable 的勾選 ; 35
36
發射的實現 講解 Shell Prefab 打開 Prefab 文件夾, 將 Shell Prefab 拖到場景中 查看 Shell 組成 雙擊 ShellExplosion 37
發射的實現 創建射擊位置 在 Hierarchy 面板中, 選中 Tank 對象 右鍵 Create Empty, 創建一個空物件 將其重命名 FireTransform 設置 Position 為 (0,1.7,1.35) 設置 Rotation 為 (350,0,0) 38
發射的實現 射擊方法實現 在 Scripts > Tank 中找到 TankShooting 文件, 拖拽到 Tank 對象上 按兩下 TankShooting, 打開 MonoDevelop 在 Prefabs 中找到 Shell, 拖拽到 TankShooting 的 Shell 將 FireTransform 節點, 拖拽到 Fire Transform 上 把 AimSlider, 拖到 Aim Slider 找到 Tank 第 2 個 AudioSource, 確保其 Loop 和 Play On Awake 都是未勾選狀態, 將其拖到 Shooting Audio 上 39
發射的實現 射擊設置完善 點擊 Charging Clip 旁的小圓圈, 選擇 ShotCharging 同樣的, 將 Fire Clip, 設置為 ShotFiring 選中 Tank 對象, 點擊 Apply 保存 40
發射的實現 Quiz 哪個組件是用來創建 UI Slider 的視覺化部分? A)Image;B)Sprite;C)Slider;D) 必須要別的腳本實現 當滑鼠某按鈕按住時, 以下哪個方法能 return true? A)Input.GetMouseButton; B) Input.GetMouseButtonDown; C)Input.GetMouseUp; D)Input.GetAxis 剛體 (Rigidbody) 的速度 (velocity) 是那種類型? A)float; B)Transform; C)Vector3; D)Velocity 哪個組件是用來創建 UI Slider 的視覺化部分? A)Image;B)Sprite;C)Slider;D) 必須要別的腳本實現 當滑鼠某按鈕按住時, 以下哪個方法能 return true? A)Input.GetMouseButton; B) Input.GetMouseButtonDown; C)Input.GetMouseUp; D)Input.GetAxis 剛體 (Rigidbody) 的速度 (velocity) 是那種類型? A)float; B)Transform; C)Vector3; D)Velocity 41
42
雙人遊戲 創建 Tank 生成位置 在 Hierarchy 面板中, 使用 Create > Create Empty 創建兩個空對象 分別重命名為 SpawnPoint1,SpawnPoint2 設置 SpawnPoint1 的 Position 為 (-3,0,30),Rotation 為 (0, 180,0) 設置 SpawnPoint2 的 Position 為 (13,0,-5),Rotation 為 (0,0, 0) 選擇 SpawnPoint1, 在 Inspector 面板, 點擊 選擇藍色的標籤 同樣的操作,SpawnPoint2 選擇紅色的標籤 43
雙人遊戲 設置 GameManager 在 Prefabs 文件夾將 MessageCanvas 拖入場景中 創建一個 Empty Object, 增加 Game Manager Component 雙擊 GameManager 查看代碼 自主將對應的 component 填入 Game Manager 中 44
雙人遊戲 小測試 哪個屬性可以使其所定義的內容能在 Inspector 在類聲明前出現? A)ShowInInspector;B)HideInInspector ; C)Serializable;D)ShowInfo 在使用協同程式時, 什麼類型一般通過某個方法返回? A)IEnumerator; B) IEnumerable;C)void; D) Interface 哪個組件是在 UI 系統中顯示文字的? A)String; B)Message; C)Text; D) WordRenderer 哪個屬性可以使其所定義的內容能在 Inspector 在類聲明前出現? A)ShowInInspector;B)HideInInspector ; C)Serializable;D)ShowInfo 在使用協同程式時, 什麼類型一般通過某個方法返回? A)IEnumerator; B) IEnumerable;C)void; D) Interface 哪個組件是在 UI 系統中顯示文字的? A)String; B)Message; C)Text; D)WordRenderer 45
46
AR 遊戲 SDK Set up 新建 Scene 命名為 ARgame, 將 Main Camera 刪除 打開 Additional Files 裡面的 vuforiaunity-6-2-10.unitypackage 打開 Vuforia -> Prefabs, 將 ARCamera 拖入 Hierarchy 中 點擊 Play 47
AR 遊戲 SDK Setup 你可以到 Google 搜索 : Vuforia Target Manager, 然後登錄進去 License Manager 創建一個免費 license 或者你也可以使用我們提供的 license(vuforialicense.txt), 複製黏貼到 ARCamera > Vuforia Behaviour 的 App License Key 欄位 點擊 Play 48
AR 遊戲 Scene setup 接下去我們要修復陰影 : 因為現在拉遠了看, 放大 / 縮小的時候, 當前的陰影會消失 這是由於影子距離太小了到 Editing>Project Setting> Quality, 把 Shadow Distance 改為 300 保存場景 將 LevelArt 拖入到 Hierachy 取消 Baked Global Illumination; ( 因为这个场景如果用这些设置会导致 Bake 时间很长 ) 將 Directional Light 刪除 49
AR 遊戲 ImageTarget 要確保光照充足, 如果是光照不夠的地方使用, 會導致 frame rate 下降很多 在 Project > Vuforia > Prefabs 資料夾, 把 ImageTarget 拖入 Hirarchy 視窗 ( 確保 Position 為 0,0,0) 你可以看到 Image Target Behaviour 元件上 No targets defined. Press here for target creation! 點擊打開到 Target Manager 可以創建 Database, 不過我們已經給大家創建好了 50
AR 遊戲 ImageTarget 找到 ARTrainingDB.unitypackage, 按兩下完成導入 package 在 Hierarchy 視窗, 選中 ImageTarget, 在 Image 目標 Behaviour 元件上 Set 選擇 ARTrainingDB 資料, 圖像 Target 選擇 Cans. 設置 Width 為 100. 右鍵點擊 ImageTarget, 創建 3D 物件 > Cube 如果現在 Play 的話是 Track 不到的! 選擇 ARCamera > Open Vuforia Configuration > Database Set, 打勾 Load Data Set ARTrainingDB. 然後在 Activate 後打勾 51
AR 遊戲 最終 52
Build on mobile IOS: Android: https://unity3d.com/learn/tuto rials/topics/mobiletouch/building-your-unitygame-ios-device-testing https://unity3d.com/fr/learn/tutoria ls/topics/mobile-touch/buildingyour-unity-game-android-devicetesting 53
2017.2 Updates 安裝的時候記得勾選 Vuforia Augmented Reality Support 打開 Edit>Project Settings>Player XR Setting 中勾選 Vuforia Augmented Reality Supported Steps: Add an ARCamera Open the global Vuforia Configuration Inspector Activate the target databases Add targets to your scene 54
Thank you! panketing@unity3d.com