Unity 開發入門與實踐(微課視頻版)

  • 出版商: 清華大學
  • 出版日期: 2025-09-01
  • 售價: $654
  • 語言: 簡體中文
  • ISBN: 7302699801
  • ISBN-13: 9787302699804
  • 相關分類: 遊戲引擎 Game-engineC#
  • 下單後立即進貨 (約4週~6週)

  • Unity 開發入門與實踐(微課視頻版)-preview-1
  • Unity 開發入門與實踐(微課視頻版)-preview-2
  • Unity 開發入門與實踐(微課視頻版)-preview-3
Unity 開發入門與實踐(微課視頻版)-preview-1

商品描述

"本書基於 Unity 2022 版本,系統地介紹了 Unity 編輯器的基礎界面、功能模塊和界面設置等。 工欲善其事,必先利其器。要想學好 Unity,程序開發是必不可少的,所以本書詳細介紹了 C#語言的語法、條件語句、數組、集合、字符串類、文件的操作、常用算法和設計模式,以及 Socket 網絡編程等技術。 本書共設 18 章,系統地闡述了 Unity 程序開發的全流程設計體系。內容涵蓋 Unity 引擎核心機制與 C#語言編程基礎兩大維度,具體包括 C#語言基礎語法與編程範式、Unity 界面交互設計原理、面向對象程序設計思想、常用數據結構與算法實現、文件系統操作、多媒體資源整合、數據庫交互等核心模塊。教學體系設計強調問題解決能力培養,通過典型案例解析引導讀者掌握需求分析方法與編程實現路徑。 本書針對可視化界面開發這一實踐性環節,采用漸進式教學法,將其與核心編程技術模塊進行有機整合。通過構建“理論認知-算法設計-界面實現”的完整學習鏈路,既可以降低技術實現門檻,又能強化工程化思維培養。這種編排方式既能激發學習者的自主探究能力,也為教師開展項目驅動式教學提供了有效支撐,最終實現知識體系構建與實踐能力提升的雙重教學目標。 本書不僅可以作為廣大 Unity 初學者和對 Unity 感興趣的讀者的入門書籍,也可以作為從事 Unity 工作的開發人員的學習參考書,還可以作為開展 Unity 培訓的學校或者機構的教材。 "

作者簡介

張堯,Unity3D領域優質創作者,精通C#,雲原生入門級開發者認證,助理工程師,CSDN 2022年度博客之星,CSDN博客專家,華為雲雲享專家,InfoQ專家博主,阿裏雲博客專家。

目錄大綱

目 錄 

第 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