Unity 開發入門與實踐(微課視頻版)
- 出版商: 清華大學
- 出版日期: 2025-09-01
- 售價: $654
- 語言: 簡體中文
- ISBN: 7302699801
- ISBN-13: 9787302699804
-
相關分類:
遊戲引擎 Game-engine、C#
下單後立即進貨 (約4週~6週)
商品描述
作者簡介
目錄大綱
目 錄
第 1 章 進入 Unity 的世界 ························ 1
視頻講解:13 分鐘
1.1認識 Unity 引擎 ·································· 1
1.1.1Unity 簡介 ······························· 2
1.1.2 Unity 發展史 ···························· 2
1.1.3 Unity 應用領域 ························· 4
1.1.4 Unity 從業介紹 ························· 7
1.2 Unity 配置與運行 ······························· 8
1.2.1 Unity 版本介紹 ························· 8
1.2.2 推薦使用的 Unity 版本··············· 12
1.2.3 Unity Hub 的下載與安裝 ············ 12
1.2.4 Unity Hub 的授權與激活 ············ 14
1.2.5 Unity 的下載與安裝 ·················· 16
1.2.6 Unity 中文漢化 ························ 18
1.3 運行 Unity 項目 ································· 19
1.3.1 新建 Unity 項目························ 19
1.3.2 打開 Unity 項目························ 20
1.3.3 運行 Unity 項目························ 21
1.3.4 新建 C#腳本 ···························· 22
1.3.5 初識 Unity 的 API ····················· 24
代碼 1-1 Unity 編輯器 Awake 函數的使用 ······························ 24
代碼1-2 Update、FixedUpdate、LateUpdate 函數的調用順序 ····· 25
1.3.6 課後習題 ································ 26
1.4 Unity 編輯器簡介 ······························ 26
1.4.1 窗口布局 ································ 26
1.4.2 菜單欄 ··································· 31
1.4.3 工具欄 ··································· 36
1.4.4 工作視圖 ································ 37
1.4.5 重要概念 ································ 41
1.5 本章小結 ········································· 44
第 2 章 Unity 創建場景 ·························· 45
視頻講解:5 分鐘 2.1 創建 2D 場景 ··································· 45
2.1.1 創建 2D 工程 ·························· 45
2.1.2 導入 2D 資源 ·························· 46
2.1.3 制作 2D 動畫 ·························· 47
2.1.4 課後習題 ································ 50
2.2 創建 3D 場景 ··································· 50
2.2.1 創建 3D 工程 ·························· 50
2.2.2 創建 3D 模型 ·························· 51
2.2.3 導入 3D 資源 ·························· 51
2.2.4 課後習題 ································ 52
2.3 本章小結 ········································· 52
第 3 章 Unity 組件和預制體 ···················· 53
視頻講解:9 分鐘
3.1 遊戲對象和組件 ································ 53
3.1.1 創建遊戲對象 ·························· 53
3.1.2 添加組件 ································ 54
3.1.3 特殊的組件——腳本 ················· 55
代碼 3-1 添加屬性 ··························· 55
3.1.4 課後習題 ································ 55
3.2 Unity 組件 ······································· 56
3.2.1 常用組件介紹 ·························· 56
3.2.2 獲取、添加和刪除組件 ·············· 57
代碼 3-2 獲取 Transform 組件············· 57
代碼 3-3 為遊戲對象添加 Rigidbody 組件 ································ 58
代碼 3-4 刪除 Box Collider 組件 ········· 58
3.2.3 課後習題 ································ 59
3.3 Unity 預制體 ···································· 60
3.3.1 創建預制體 ····························· 60
3.3.2 實例化預制體 ·························· 61
代碼 3-5 實例化預制體 ····················· 61
3.3.3 課後習題 ································ 62
3.4 本章小結 ········································· 62
第 4 章 Unity 的常用功能系統 ················· 63
視頻講解:46 分鐘
4.1 Unity 的燈光系統 ······························ 64
4.1.1 平行光 ··································· 64
4.1.2 點光源 ··································· 65
4.1.3 聚光燈 ··································· 65
4.1.4 面積光 ··································· 66
4.2 Unity 的遮擋剔除系統 ························ 67
4.2.1 遮擋剔除原理 ·························· 67
4.2.2 遮擋剔除示例 ·························· 67
4.3 Unity 的導航系統 ······························ 69
4.3.1 導航系統介紹 ·························· 70
4.3.2 導航系統面板介紹 ···················· 70
4.3.3 導航系統屬性介紹 ···················· 71
4.3.4 AI 尋路示例 ···························· 72
代碼 4-1 為對象添加坐標點位置 ········· 74
4.3.5 課後習題 ································ 75
4.4 Unity 的 UI 系統之 UGUI ···················· 75
4.4.1 UGUI——Canvas······················ 76
4.4.2 UGUI——Text ························· 76
4.4.3 UGUI——Image ······················· 77
4.4.4 UGUI——Button ······················ 78
代碼 4-2 Button 監聽函數測試代碼 ······ 78
代碼 4-3 動態添加監聽事件 ··············· 79
4.4.5 UGUI——Toggle ······················ 79
代碼 4-4 Toggle 組件監聽函數測試 代碼 ································· 80
代碼 4-5 通過代碼動態添加 Toggle 事件 ································· 81
4.4.6 UGUI——Slider ······················· 82
代碼 4-6 監聽 Slider 組件的 Value 值, 改變 Text 的值 ···················· 83
4.4.7 UGUI——ScrollView ················· 84
4.4.8 UGUI——Dropdown ················· 85
代碼 4-7 Dropdown 組件的使用實例 ···· 86
4.4.9 UGUI——InputField ·················· 87
代碼 4-8 修改腳本,添加單擊登錄按鈕後顯示賬號和密碼功能 ········· 88
4.4.10 課後習題 ······························ 89
4.5 Unity 的 UI 系統之 GUI ······················ 90
4.5.1 GUI 簡介 ······························· 90
4.5.2 GUI 的基本控件 ······················ 90
代碼 4-9 GUI 常用控件的使用 ··········· 91
4.5.3 GUILayout 自動布局 ················· 92
代碼 4-10 使用默認 Rect 定位方式 排列 Label ························ 92
代碼 4-11 使用 GUILayout 自動布局 ···· 93
4.6 Unity 的動畫系統 ······························ 93
4.6.1 導入動畫模型 ·························· 93
4.6.2 切換動畫 ································ 96
4.6.3 控制動畫的播放 ······················· 97
代碼 4-12 通過控制動畫參數切換動畫 ··· 98
4.7 本章小結 ········································· 99
第 5 章 腳本開發 ································· 100
視頻講解:27 分鐘
5.1 C#與引擎交互 ································· 100
5.1.1 C#運行時 ······························ 101
5.1.2 新建和應用腳本 ······················ 101
代碼 5-1 測試代碼 ·························· 102
5.1.3 腳本與遊戲組件 ······················ 103
代碼 5-2 用腳本控制遊戲組件的屬性值 ····························· 103
5.1.4 腳本的生命周期 ······················ 104
5.1.5 腳本的執行順序 ······················ 105
代碼 5-3 腳本排序 ·························· 106
5.1.6 腳本序列化 ···························· 106
代碼 5-4 腳本序列化 ······················· 106
代碼 5-5 JSON 的序列化和反序列化 ··· 107
5.1.7 課後習題 ······························· 107
5.2 數據類型 ······································· 108
5.2.1 值類型和引用類型 ·················· 108
代碼 5-6 打印不同數據類型的最小值和最大值 ························· 108
5.2.2 裝箱和拆箱 ··························· 109
代碼 5-7 數據類型的裝箱操作 ·········· 109
代碼 5-8 將引用類型對象轉換成任意 值類型 ·····························110
5.2.3 Unity 的值類型和引用類型 ········110
代碼 5-9 修改值類型的值不會影響 對象的值 ··························110
代碼 5-10 修改物體的 MeshRenderer 組件的 Color 值 ················ 111
5.3 常量和變量 ····································· 111
5.3.1 常量的初始化 ························· 111
代碼 5-11 常量的初始化 ··················112
5.3.2 變量的初始化 ·························112
代碼 5-12 變量的初始化 ··················112
5.3.3 變量的作用域 ·························112
代碼 5-13 同名局部變量不能在同一作用域內聲明兩次 ·············112
代碼 5-14 循環體允許相同的變量名 ···112
代碼 5-15 變量作用域沖突代碼 ·········113
5.3.4 命名慣例和規範 ······················113
代碼 5-16 用帕斯卡命名法命名類和函數名 ····························114
代碼 5-17 分別用駱駝式命名法和下畫線法命名同一個函數 ····114
5.3.5 命名法使用建議 ······················114
5.3.6 課後習題 ·······························115
5.4 條件語句 ········································115
5.4.1 if 語句 ··································116
代碼 5-18 if 語句執行流程示例 ··········116
5.4.2 if…else 語句 ···························117
代碼 5-19 if…else 語句執行流程示例 ··118
5.4.3 嵌套 if…else 語句 ····················118
代碼 5-20 嵌套 if…else 語句執行流程示例 ·······························119
5.4.4 switch 語句 ···························· 120
代碼 5-21 switch 語句的代碼示例 ······ 120
5.4.5 課後習題 ······························· 121
5.5 循環語句 ········································ 121
5.5.1 while 循環 ····························· 122
代碼 5-22 while 循環語句的代碼示例 ··· 122
5.5.2 do…while 循環 ······················· 122
代碼 5-23 do…while 循環語句的代碼示例 ······························ 123
5.5.3 for 循環 ································ 123
代碼 5-24 for 循環語句的代碼示例 ····· 123
5.5.4 foreach 循環 ··························· 124
代碼 5-25 for 循環和 foreach 循環語句 的代碼示例 ····················· 124
5.5.5 循環中的控制語句 ··················· 125
代碼 5-26 break 語句的代碼示例 ········ 126
代碼 5-27 continue 語句的代碼示例 ···· 127
5.5.6 課後習題 ······························· 128
5.6 運算符 ··········································· 128
5.6.1 算術運算符 ···························· 128
代碼 5-28 算術運算符的代碼示例 ······ 128
5.6.2 關系運算符 ···························· 129
代碼 5-29 關系運算符的代碼示例 ······ 129
5.6.3 邏輯運算符 ···························· 131
代碼 5-30 邏輯運算符代碼示例 ········· 131
5.6.4 賦值運算符 ···························· 132
代碼 5-31 賦值運算符的代碼示例 ······ 132
5.7 數組 ·············································· 133
5.7.1 數組操作 ······························· 133
5.7.2 初始化數組 ···························· 133
5.7.3 數組賦值 ······························· 134
5.7.4 訪問數組元素 ························· 134
代碼 5-32 訪問數組元素的代碼示例 ··· 134
5.7.5 多維數組 ······························· 135
代碼 5-33 多維數組的代碼示例 ········· 135
5.7.6 課後習題 ······························· 136
5.8 集合 ·············································· 136
5.8.1 常見集合 ······························ 136
5.8.2 數組、ArrayList 和 List ············ 137
5.8.3 隊列 ···································· 138
代碼 5-34 Queue 的代碼示例 ············ 139
5.8.4 堆棧 ···································· 140
代碼 5-35 Stack 的代碼示例 ············· 140
5.8.5 哈希表 ································· 141
代碼 5-36 Hashtable 的代碼示例 ········ 142
5.8.6 字典 ···································· 142
代碼 5-37 Dictionary 的代碼示例 ······· 143
5.9 本章小結 ······································· 144
第 6 章 文件與文件夾 ··························· 145
視頻講解:12 分鐘
6.1 I/O 類 ··········································· 145
6.1.1 Directory 類 ··························· 146
6.1.2 File 類 ································· 146
6.1.3 Stream 類 ······························ 147
6.2 文件的操作 ···································· 147
6.2.1 創建文件 ······························ 147
6.2.2 刪除文件 ······························ 148
6.2.3 復制/剪切文件 ······················· 148
6.2.4 讀/寫文件 ····························· 148
代碼 6-1 用 FileStream 寫入數據的 代碼示例 ························· 148
代碼 6-2 用 FileStream 類讀取文件 的代碼示例 ······················ 150
6.2.5 課後習題 ······························ 150
6.3 文件夾的操作 ································· 150
6.3.1 創建文件夾 ··························· 150
6.3.2 刪除文件夾 ··························· 151
6.3.3 剪切文件夾 ··························· 151
6.3.4 設置文件夾的屬性 ·················· 152
6.3.5 課後習題 ······························ 152
6.4 本章小結 ······································· 152
第 7 章 String 類 ································· 153
視頻講解:5 分鐘
7.1 String 類簡介 ·································· 153
7.1.1 String 類的屬性 ······················ 153
7.1.2 創建 String 類對象 ··················· 154
代碼 7-1 創建 String 類對象的代碼 示例 ································ 154
7.2 字符串的常用操作 ···························· 155
7.2.1 比較字符串 ···························· 155
代碼 7-2 Compare 和 Equals 方法的代碼示例 ·························· 155
7.2.2 定位字符串 ···························· 156
代碼 7-3 StartsWith、EndsWith 以及 IndexOf 相關方法的代碼示例 ································ 157
7.2.3 格式化字符串 ························· 158
代碼 7-4 Format 方法的代碼示例 ······· 159
7.2.4 連接字符串 ···························· 160
代碼 7-5 Concat、Join 方法以及連接 運算符“+”的代碼示例 ······ 160
7.2.5 分割字符串 ···························· 161
代碼 7-6 Split 方法的代碼示例 ·········· 161
7.2.6 插入和填充字符串 ··················· 161
代碼 7-7 Insert 方法的代碼示例 ········· 162
7.2.7 刪除字符串 ···························· 162
代碼 7-8 Remove 和 Trim 方法的代碼 示例 ································ 162
7.2.8 復制字符串 ···························· 163
代碼 7-9 Copy 和 CopyTo 方法的代碼 示例 ································ 163
7.2.9 替換字符串 ···························· 164
代碼 7-10 Replace 方法的代碼示例 ····· 164
7.2.10 更改大小寫 ·························· 165
代碼 7-11 ToUpper 和 ToLower 方法的 代碼示例 ························ 165
7.2.11 課後習題 ····························· 165
7.3 本章小結 ········································ 165
第 8 章 正則表達式 ······························ 166
視頻講解:11 分鐘
8.1 正則表達式在 Unity 中的應用 ············· 166
8.1.1 匹配正整數 ··························· 166
代碼 8-1 在 Unity 中使用正則表達式 匹配正整數 ······················ 166
8.1.2 匹配大寫字母 ························ 167
代碼 8-2 在 Unity 中使用正則表達式 匹配大寫字母 ··················· 167
8.1.3 課後習題 ······························ 168
8.2 Regex 類 ······································· 168
8.2.1 Regex 類的靜態 Match 方法 ······ 168
代碼 8-3 Regex 類的靜態 Match 方法 的使用示例 ······················ 169
8.2.2 Regex 類的靜態 Matches 方法 ···· 170
代碼 8-4 Regex 類的靜態 Matches 方法 的使用示例 ······················ 170
8.2.3 Regex 類的靜態 IsMatch 方法 ···· 171
代碼 8-5 Regex 類的靜態 IsMatch 方法 的使用示例 ······················ 171
8.2.4 課後習題 ······························ 172
8.3 定義正則表達式 ······························ 172
8.3.1 轉義字符 ······························ 172
代碼 8-6 正則表達式轉義字符的使用 示例 ······························· 172
8.3.2 字符類 ································· 173
代碼 8-7 正則表達式字符類的使用 示例 ······························· 173
8.3.3 定位點 ································· 174
代碼 8-8 正則表達式定位點的使用 示例 ······························· 174
8.3.4 限定符 ································· 175
代碼 8-9 正則表達式限定符的使用 示例 ······························· 175
8.3.5 課後習題 ······························ 176
8.4 常用的正則表達式 ··························· 176
8.4.1 校驗數字的表達式 ·················· 176
代碼 8-10 常用校驗數字的正則表達式 的使用示例 ····················· 176
8.4.2 校驗字符的表達式 ·················· 177
代碼 8-11 常用校驗字符的正則表達式 的使用示例 ····················· 177
8.4.3 校驗特殊需求的表達式 ············· 178
代碼 8-12 常用校驗特殊需求的正則 表達式的使用示例 ············ 178
8.4.4 課後習題 ······························· 179
8.5 正則表達式示例 ······························· 179
8.5.1 示例一:匹配字母 ··················· 179
代碼 8-13 使用正則表達式匹配以 m 開 頭、e 結尾的單詞示例 ······· 179
8.5.2 示例二:替換掉空格 ················ 180
代碼 8-14 使用正則表達式去掉多余 空格的示例 ····················· 180
8.5.3 課後習題 ······························· 181
8.6 本章小結 ········································ 181
第 9 章 持久化與數據讀取 ····················· 182
視頻講解:54 分鐘
9.1 持久化數據類 ·································· 182
9.1.1 PlayerPrefs 類的作用 ················ 183
代碼 9-1 用 PlayerPrefs 類保存數據 ···· 183
代碼 9-2 用 PlayerPrefs 類讀取數據 ···· 183
9.1.2 ScriptableObject 類的使用 ·········· 184
代碼 9-3 ScriptableObject 類的使用 ····· 184
代碼 9-4 用 ReadData 類讀取數據類 資源 ································ 186
9.1.3 EditorPrefs 類的使用 ················ 186
代碼 9-5 EditorPrefs 類的使用 ··········· 186
9.1.4 用 PlayerPrefs 類保存復雜的數據 結構 ····································· 187
代碼 9-6 用 PlayerPrefs 類保存復雜 的數據結構 ······················· 187
9.1.5 課後習題 ······························· 189
9.2 JSON 文件的處理 ····························· 189
9.2.1 寫 JSON 數據 ························· 189
代碼 9-7 生成 JSON 數據 ················· 189
代碼 9-8 將 JSON 數據以文本格式 保存到本地文件夾 ·············· 190
9.2.2 讀取 JSON 數據 ····················· 192
代碼 9-9 從文件中讀取 JSON 數據 ···· 192
9.2.3 解析 JSON 數據 ····················· 192
代碼 9-10 解析 JSON 數據 ··············· 193
9.2.4 課後習題 ······························ 194
9.3 XML 文件的處理 ···························· 194
9.3.1 讀取 XML 數據 ······················ 194
代碼 9-11 讀取 XML 數據 ··············· 194
9.3.2 寫 XML 數據 ························· 196
代碼 9-12 生成 XML 文件 ··············· 196
9.3.3 修改 XML 數據 ······················ 197
代碼 9-13 修改 XML 數據 ··············· 197
9.3.4 課後習題 ······························ 198
9.4 Excel 文件的處理 ···························· 199
9.4.1 導入 EPPlus 插件 ···················· 199
9.4.2 創建 Excel 文件······················ 199
代碼 9-14 創建 Excel 文件 ··············· 200
9.4.3 讀取 Excel 文件······················ 201
代碼 9-15 讀取 Excel 文件 ··············· 201
9.4.4 寫入 Excel 文件······················ 202
代碼 9-16 寫入 Excel 文件 ··············· 202
9.4.5 課後習題 ······························ 203
9.5 從 CSV 文件中讀取數據 ···················· 204
9.5.1 創建 CSV 文件······················· 204
代碼 9-17 創建 CSV 文檔 ················ 204
代碼 9-18 創建 DataTable 數據 ·········· 205
代碼 9-19 創建 CSV 文件 ················ 207
9.5.2 讀取 CSV 文件······················· 209
代碼 9-20 讀取 CSV 文件 ················ 209
9.5.3 寫入 CSV 文件······················· 210
代碼 9-21 將 DataTable 數據寫入 CSV 文件 ······························ 210
9.5.4 課後習題 ······························ 213
9.6 從 MySQL 數據庫讀取數據 ················ 213
9.6.1 安裝 MySQL 數據庫················ 214
9.6.2 使用 Navicat 連接 MySQL ········ 217
9.6.3 使用 Unity 讀取 MySQL 數據庫 數據 ····································· 218
代碼 9-22 新建 SqlAccess.cs 類封裝 SQL 語句 ······························ 219
代碼 9-23 新建 Login.cs 腳本,調用SqlAccess 類中的函數進行賬號驗證 ························ 221
9.6.4 課後習題 ······························· 223
9.7 從 SQLite 數據庫中讀取數據 ·············· 223
9.7.1 創建數據庫 ···························· 223
代碼 9-24 創建 SQLite 數據庫 ··········· 223
9.7.2 寫入數據 ······························· 224
代碼 9-25 寫入 SQLite 數據庫數據 ····· 224
9.7.3 讀取數據庫數據 ······················ 226
代碼 9-26 讀取 SQLite 數據庫數據 ····· 226
9.7.4 封裝的常用 SQL 命令 ·············· 227
代碼 9-27 封裝 SQLite 數據庫操作 ····· 227
代碼 9-28 操作 SQLite 數據庫 ··········· 231
9.7.5 課後習題 ······························· 231
9.8 本章小結 ········································ 231
第 10 章 實現一般遊戲機制 ··················· 233
視頻講解:26 分鐘
10.1 實現角色移動 ································ 233
10.1.1 用 Character Controller 組件實現角色移動 ····················· 233
代碼 10-1 使用 Character Controller組件移動角色 ················ 234
10.1.2 用 Transform 組件實現角色移動 ································· 235
代碼 10-2 使用 Transform 組件移動角色 ···························· 236
10.1.3 用 Rigidbody 組件實現角色移動 ································· 236
代碼 10-3 使用 Rigidbody 組件控制角色移動 ······················ 237
10.1.4 課後習題 ··························· 238
10.2 實現遊戲中的射擊機制 ···················· 238
10.2.1 搭建場景 ·························· 238
10.2.2 實現角色移動 ···················· 239
代碼 10-4 實現角色移動 ··············· 239
代碼 10-5 鼠標鎖定 ····················· 242
10.2.3 了解射線 ·························· 245
10.2.4 實現射擊 ·························· 246
代碼 10-6 射擊控制 ····················· 248
10.2.5 課後習題 ·························· 252
10.3 本章小結 ····································· 252
第 11 章 AssetBundle 資源熱更新 ··········· 253
視頻講解:8 分鐘
11.1 AssetBundle 工作流程 ····················· 253
11.1.1 工作流程簡介····················· 253
11.1.2 打包分組策略····················· 254
11.2 AssetBundle 操作 ··························· 255
11.2.1 AssetBundle 打包 ················ 255
代碼 11-1 PackBundles.cs 代碼 ········ 256
代碼 11-2 為 PackBundles.cs 腳本添加選定資源打包和全部打包功能 ··················· 257
11.2.2 manifest 文件 ····················· 259
11.2.3 AssetBundle 文件上傳 ·········· 259
11.2.4 AssetBundle 加載 ················ 260
代碼 11-3 LoadBundles.cs 腳本主要用來加載 AssetBundle 文件 ···························· 260
11.2.5 AssetBundle 卸載 ················ 261
代碼 11-4 編輯 LoadBundles.cs 腳本,演示卸載操作 ················ 261
11.3 AssetBundle 打包工具 ····················· 262
11.3.1 導入插件··························· 262
11.3.2 界面說明··························· 263
11.3.3 課後習題··························· 263
11.4 本章小結 ····································· 263
第 12 章 編輯器擴展 ···························· 264
視頻講解:19 分鐘
12.1 編輯器相關特性 ···························· 264
12.1.1 常用的特性 ························ 265
代碼 12-1 Range 特性示例 ·············· 265
代碼 12-2 Multiline 特性示例 ·········· 265
代碼 12-3 TextArea 特性示例 ·········· 266
代碼 12-4 SerializeField 特性示例 ····· 266
代碼 12-5 NonSerialized 特性示例 ···· 266
代碼 12-6 HideInInspector 特性示例 ·· 266
代碼 12-7 FormerlySerializedAs 特性示例 ···························· 267
代碼 12-8 ContextMenu 特性示例 ····· 267
代碼 12-9 ContextMenuItem 特性示例 ···························· 268
代碼 12-10 Header 特性示例 ··········· 268
代碼 12-11 Space 特性示例 ············· 269
代碼 12-12 Tooltip 特性示例 ··········· 269
代碼 12-13 ColorUsage 特性示例 ······ 270
代碼 12-14 HelpURL 特性示例 ········ 270
12.1.2 常用類的特性 ····················· 270
代碼 12-15 Serializable 特性示例 ······ 270
代碼 12-16 RequireComponent 特性示例 ··························· 271
代碼 12-17 DisallowMultipleComponent 特性示例 ····················· 271
代碼 12-18 ExecuteInEditMode 特性示例 ··························· 271
代碼 12-19 ExecuteInEditMode 特性示例 ··························· 272
代碼 12-20 AddComponentMenu 特性示例 ··························· 272
12.2 導航欄 ········································· 273
12.2.1 菜單欄擴展 ························ 273
代碼 12-21 菜單欄擴展示例 ············ 273
12.2.2 導航欄擴展 ························ 274
代碼 12-22 導航欄擴展示例 ············ 274
12.3 Gizmos 輔助調試工具 ······················ 275
12.3.1 可視化輔助類 Gizmos 的使用 ··· 275
代碼 12-23 DrawGizmo 特性示例 ····· 275
代碼 12-24 OnDrawGizmosSelected 特性示例 ···················· 276
12.3.2 Gizmos 的常用方法 ············· 277
12.3.3 課後習題 ·························· 277
12.4 擴展 Hierarchy 視圖 ························ 277
12.4.1 擴展菜單 ·························· 278
代碼 12-25 擴展菜單示例 ·············· 278
12.4.2 擴展布局 ·························· 278
代碼 12-26 擴展布局示例 ·············· 278
12.4.3 重寫菜單 ·························· 279
代碼 12-27 重寫菜單示例 ·············· 279
12.5 本章小結 ····································· 280
第 13 章 Socket 編程 ···························· 282
視頻講解:14 分鐘
13.1 Socket ········································ 282
13.1.1 Socket 簡介························ 283
13.1.2 Socket 的基本函數··············· 283
13.1.3 Socket 中 TCP 的三次握手 詳解 ································ 285
13.1.4 Socket 中 TCP 的四次揮手 詳解 ································ 286
13.2 實現簡單的 Socket 聊天工具 ············· 287
13.2.1 C#語言服務器端搭建 ··········· 287
代碼 13-1 在 MessageData.cs 腳本中設置消息協議,服務器端 和客戶端都要遵循這個消 息協議 ························· 288
代碼 13-2 修改客戶端管理程序 ClientController.cs 腳本內容 ···························· 289
代碼 13-3 修改 Program.cs 腳本, 設置服務器端的主要參數 ···························· 291
13.2.2 Unity 客戶端搭建 ················ 293
代碼 13-4 MessageData.cs 聊天格式 腳本代碼 ······················ 294
代碼 13-5 客戶端連接程序代碼 ······ 295
代碼 13-6 聊天 UI 管理腳本代碼······ 298
13.2.3 整體運行 ··························· 301
13.2.4 課後習題 ··························· 302
13.3 本章小結 ······································ 302
第 14 章 常用算法 ······························· 303
視頻講解:6 分鐘
14.1 冒泡排序算法 ································ 303
14.1.1 冒泡排序算法的原理 ············ 303
14.1.2 時間復雜度 ························ 304
14.1.3 代碼示例 ··························· 304
代碼 14-1 冒泡排序算法示例 ·········· 304
14.1.4 課後習題 ··························· 305
14.2 選擇排序算法 ································ 306
14.2.1 選擇排序算法的原理 ············ 306
14.2.2 時間復雜度 ························ 306
14.2.3 代碼示例 ··························· 306
代碼 14-2 選擇排序算法示例 ·········· 306
14.2.4 課後習題 ··························· 307
14.3 插入排序算法 ································ 308
14.3.1 插入排序算法的原理 ············ 308
14.3.2 時間復雜度 ························ 308
14.3.3 代碼示例 ··························· 308
代碼 14-3 插入排序算法示例 ·········· 309
14.3.4 課後習題 ··························· 310
14.4 本章小結 ······································ 310
第 15 章 常用設計模式 ························· 311
視頻講解:7 分鐘
15.1 設計模式的設計原則 ······················· 311
15.1.1 單一職責原則 ····················· 312
15.1.2 開閉原則 ··························· 312
15.1.3 裏氏替換原則 ····················· 312
15.1.4 依賴倒置原則 ····················· 312
15.1.5 接口隔離原則 ····················· 312
15.1.6 合成復用原則 ····················· 312
15.1.7 迪米特法則 ························ 313
15.2 單例模式 ······································ 313
15.2.1 單例模式簡介 ····················· 314
15.2.2 單例模式的實現思路 ··········· 314
15.2.3 實現單例模式 ···················· 314
代碼 15-1 單例模式實現 ··············· 314
代碼 15-2 單例模式的使用示例 ······ 314
15.2.4 課後習題 ·························· 315
15.3 簡單工廠模式 ······························· 315
15.3.1 簡單工廠模式簡介 ·············· 316
15.3.2 簡單工廠模式的實現思路 ····· 316
15.3.3 實現簡單工廠模式 ·············· 316
代碼 15-3 實現簡單工廠模式的示例代碼 ···························· 316
15.3.4 課後習題 ·························· 318
15.4 本章小結 ····································· 318
第 16 章 人工智能的實現 ······················ 319
視頻講解:13 分鐘
16.1 遊戲 AI 的架構設計 ························ 319
16.1.1 移動邏輯 ·························· 320
16.1.2 決策邏輯 ·························· 320
16.1.3 戰略邏輯 ·························· 320
16.2 實現有限狀態機 ···························· 321
16.2.1 有限狀態機簡介 ················· 321
16.2.2 有限狀態機的架構 ·············· 321
16.2.3 有限狀態機的實現 ·············· 322
代碼 16-1 狀態接口類 ·················· 322
代碼 16-2 抽象狀態類 ·················· 322
代碼 16-3 狀態切換類 ·················· 324
代碼 16-4 狀態構建器 ·················· 325
代碼 16-5 狀態機 ························ 326
代碼 16-6 組件實現類 ·················· 333
16.2.4 示例演示 ·························· 335
代碼 16-7 狀態機使用示例 ············ 335
16.2.5 課後習題 ·························· 336
16.3 本章小結 ····································· 337
第 17 章 使用 Unity 制作第一人稱射擊遊戲 ······························· 338
視頻講解:41 分鐘
17.1 場景搭建 ····································· 338
17.1.1 新建項目 ··························· 338
17.1.2 導入資源 ··························· 339
17.1.3 搭建場景 ··························· 339
17.2 實現人物行走 ································ 340
17.2.1 用 Character Controller 組件實現角色移動 ····················· 340
17.2.2 實現人物奔跑及跳躍 ············ 340
17.2.3 設置奔跑及跳躍的音樂 ········· 341
代碼 17-1 實現移動 ······················ 341
17.3 實現射擊邏輯 ································ 344
17.3.1 設置槍支的動畫 ·················· 344
17.3.2 槍支開火 ··························· 347
代碼 17-2 射擊控制 ······················ 347
17.3.3 開槍特效、槍口火焰 ············ 350
代碼 17-3 增加火焰特效 ················ 351
17.3.4 子彈、彈痕 ························ 351
代碼 17-4 增加子彈和彈痕 ············· 352
17.3.5 開槍音效 ··························· 352
代碼 17-5 動畫回調函數 ················ 353
代碼 17-6 修改後的 GunSystem.cs 腳本 ···························· 355
17.3.6 槍支切換 ··························· 358
代碼 17-7 實現槍支切換 ················ 359
17.4 基於有限狀態機實現敵人 AI 邏輯 ······ 360
17.4.1 巡邏狀態 ··························· 360
代碼 17-8 實現敵人 AI 巡邏············ 360
17.4.2 尋路狀態 ··························· 364
代碼 17-9 實現敵人 AI 的尋路········· 364
17.4.3 攻擊狀態 ··························· 367
代碼 17-10 實現敵人 AI 的攻擊 ······· 367
17.5 血條系統 ······································ 371
17.5.1 實現玩家血條系統 ··············· 371
代碼 17-11 實現玩家血條系統 ········· 371
代碼 17-12 修改 PlayerControl.cs 腳本以響應血條系統事件 ··························· 372
17.5.2 實現敵人血條系統 ··············· 375
代碼 17-13 修改 EnemyUnity.cs 代碼以響應血條系統事件 ········ 375
17.6 課後習題 ····································· 379
17.7 本章小結 ····································· 379
第 18 章 數字孿生、虛擬仿真應用 ——智慧園區可視化系統··········· 381
視頻講解:32 分鐘
18.1 應用簡介 ····································· 382
18.1.1 數字孿生簡介 ···················· 382
18.1.2 數字孿生應用領域 ·············· 382
18.1.3 虛擬仿真技術 ···················· 383
18.1.4 虛擬仿真技術應用領域 ········ 383
18.2 設計思路 ····································· 383
18.2.1 設計需求 ·························· 384
18.2.2 分析需求及實現 ················· 384
18.3 實現過程 ····································· 384
18.3.1 新建項目 ·························· 384
18.3.2 導入資源 ·························· 384
18.3.3 搭建場景 ·························· 385
18.3.4 天氣數據接入及日期數據顯示 ································· 389
代碼 18-1 天氣數據接入及日期數據顯示 ···························· 389
18.3.5 圖表及數據接入 ·················· 392
代碼 18-2 完成圖表及數據接入 ······· 394
18.3.6 園區大場景交互邏輯實現 ······ 400
代碼 18-3 攝像機旋轉腳本 ············· 400
18.3.7 漫遊巡檢功能實現 ··············· 404
代碼 18-4 近景漫遊腳本 ················ 405
18.3.8 分區顯示功能實現 ··············· 406
代碼 18-5 增加按鈕交互 ················ 407
18.3.9 日夜系統實現 ····················· 410
代碼 18-6 完整代碼 ······················ 410
代碼 18-7 完整的 MainControl.cs 代碼 ···························· 412
18.4 課後習題 ······································ 420
18.5 本章小結 ······································ 421