Unity 3D腳本編程

Unity 3D腳本編程

《Unity 3D腳本編程》 全稱《Unity 3D腳本編程——使用C#語言開發跨平台遊戲》作者陳嘉棟,由電子工業出版社2016年9月出版。

內容提要

《Unity 3D腳本編程——使用C#語言開發跨平台遊戲》以Unity 3D 的跨平台基礎Mono,以及其遊戲腳本語言C#為基礎進行講解。全面系統地剖析了Unity 3D 的跨平台原理以及遊戲腳本開發的特點。

第1 章主要介紹了Unity 3D 引擎的歷史以及編輯器的基本知識;第2 章主要介紹了Mono,以及Unity3D 利用Mono 實現跨平台的原理,並且分析了C#語言為什麼更適合Unity 3D 遊戲開發的原因;第3 章到第10 章主要介紹了Unity 3D 遊戲腳本語言C#在使用Unity 3D 開發過程中的知識點,包括Unity 3D 腳本的類型基礎、數據結構,在Unity 3D 腳本中使用泛型、使用委託和事件打造自己的訊息系統、利用定製特性來拓展Unity 3D 的編輯器、Unity 3D 協程背後的秘密——疊代器,以及可空類型和序列化在Unity 3D中使用的相關知識;第11 章到第14 章主要介紹了Unity 3D 的資源管理,以及最佳化和編譯的內容。

無論是初次接觸Unity 3D 腳本編程的新人,還是有一定經驗的老手,相信都可以借《Unity 3D腳本編程——使用C#語言開發跨平台遊戲》來提高自己在Unity 3D 方面的水平。

目錄

第1 章 Hello Unity 3D 1

1.1 Unity 3D 遊戲引擎進化史 1

1.2 Unity 3D 編輯器初印象 5

1.2.1 Project 視圖 5

1.2.2 Inspector 視圖 8

1.2.3 Hierarchy 視圖 9

1.2.4 Game 視圖 10

1.2.5 Scene 視圖 12

1.2.6 繪圖模式 14

1.2.7 渲染模式 16

1.2.8 場景視圖控制 17

1.2.9 Effects 選單和Gizmos 選單 18

1.3 Unity 3D 的組成 18

1.4 為何需要遊戲腳本 20

1.5 本章小結 21

第2 章 Mono 所搭建的腳本核心基礎 22

2.1 Mono 是什麼 22

2.1.1 Mono 的組成 22

2.1.2 Mono 運行時 23

2.2 Mono 如何扮演腳本的角色 24

2.2.1 Mono 和腳本 24

2.2.2 Mono 運行時的嵌入 26

2.3 Unity 3D 為何能跨平台?聊聊CIL 38

2.3.1 Unity 3D 為何能跨平台 38

2.3.2 CIL 是什麼 40

2.3.3 Unity 3D 如何使用CIL 跨平台 44

2.4 腳本的選擇,C# 或 JavaScript 48

2.4.1 最熟悉的陌生人——UnityScript 48

2.4.2 UnityScript 與 JavaScript 51

2.4.3 C#與UnityScript 55

2.5 本章總結 57

第3 章 Unity 3D 腳本語言的類型系統 58

3.1 C#的類型系統 58

3.2 值類型和引用類型 65

3.3 Unity 3D 腳本語言中的引用類型 73

3.4 Unity 3D 遊戲腳本中的值類型 90

3.4.1 Vector2、Vector3 以及Vector4 90

3.4.2 其他常見的值類型 94

3.5 裝箱和拆箱 95

3.6 本章總結 98

第4 章 Unity 3D 中常用的數據結構 99

4.1 Array 數組 100

4.2 ArrayList 數組 101

4.3 List<T>數組 102

4.4 C#中的鍊表——LinkedList<T> 103

4.5 佇列(Queue<T>)和棧(Stack<T>) 107

4.6 Hash Table(哈希表)和Dictionary<K,T>(字典) 112

4.7 本章總結 120

第5 章 在Unity 3D 中使用泛型 121

5.1 為什麼需要泛型機制 121

5.2 Unity 3D 中常見的泛型 124

5.3 泛型機制的基礎 127

5.3.1 泛型類型和類型參數 128

5.3.2 泛型類型和繼承 131

5.3.3 泛型接口和泛型委託 131

5.3.4 泛型方法 136

5.4 泛型中的類型約束和類型推斷 139

5.4.1 泛型中的類型約束 139

5.4.2 類型推斷 144

5.5 本章總結 146

第6 章 在Unity 3D 中使用委託 149

6.1 向Unity 3D 中的SendMessage 和BroadcastMessage 說拜拜 150

6.2 認識回調函式機制——委託 151

6.3 委託是如何實現的 154

6.4 委託是如何調用多個方法的 160

6.5 用事件(Event)實現訊息系統 164

6.6 事件是如何工作的 169

6.7 定義事件的觀察者,實現觀察者模式 172

6.8 委託的簡化語法 177

6.8.1 不必構造委託對象 177

6.8.2 匿名方法 178

6.8.3 Lambda 表達式 196

6.9 本章總結 201

第7 章 Unity 3D 中的定製特性 202

7.1 初識特性——Attribute 202

7.1.1 DllImport 特性 203

7.1.2 Serializable 特性 205

7.1.3 定製特性到底是誰 207

7.2 Unity 3D 中提供的常用定製特性 208

7.3 定義自己的定製特性類 213

7.4 檢測定製特性 216

7.5 親手拓展Unity 3D 的編輯器 217

7.6 本章總結 227

第8 章 Unity 3D 協程背後的疊代器 228

8.1 初識Unity 3D 中的協程 228

8.1.1 使用StartCoroutine 方法開啟協程 229

8.1.2 使用StopCoroutine 方法停止一個協程 233

8.2 使用協程實現延時效果 234

8.3 Unity 3D 協程背後的秘密——疊代器 238

8.3.1 你好,疊代器 238

8.3.2 原來是狀態機 242

8.3.3. 狀態管理 248

8.4 WWW和協程 253

8.5 Unity 3D 協程代碼實例 257

8.6 本章總結 259

第9 章 在Unity 3D 中使用可空型 260

9.1 如果沒有值 260

9.2 表示空值的一些方案 261

9.2.1 使用魔值 261

9.2.2 使用標誌位 261

9.2.3 藉助引用類型來表示值類型的空值 265

9.3 使用可空值類型 267

9.4 可空值類型的簡化語法 272

9.5 可空值類型的裝箱和拆箱 278

9.6 本章總結 280

第10 章 從序列化和反序列化看Unity 3D 的存儲機制 281

10.1 初識序列化和反序列化 281

10.2 控制類型的序列化和反序列化 290

10.2.1 如何使類型可以序列化 290

10.2.2 如何選擇序列化的欄位和控制反序列化的流程 292

10.2.3 序列化、反序列化中流的上下文介紹及套用 296

10.3 Unity 3D 中的序列化和反序列化 299

10.3.1 Unity 3D 的序列化概覽 299

10.3.2 對Unity 3D 遊戲腳本進行序列化的注意事項 302

10.3.3 如何利用Unity 3D 提供的序列化器對自定義類型進行序列化 305

10.4 Prefab 和實例化之謎——序列化和反序列化的過程 309

10.4.1 認識預製體Prefab 309

10.4.2 實例化一個遊戲對象 311

10.4.3 序列化和反序列化之謎 314

10.5 本章總結 317

第11 章 移動平台動態讀取外部檔案 318

11.1 假如我想在編輯器里動態讀取檔案 318

11.2 移動平台的資源路徑問題 320

11.3 移動平台讀取外部檔案的方法 323

11.4 使用Resources 類載入資源 330

11.5 使用WWW類載入資源 332

11.5.1 利用WWW類的構造函式實現資源下載 332

11.5.2 利用 WWW.LoadFromCacheOrDownload 方法實現資源下載 333

11.5.3 利用WWWForm 類實現POST 請求 335

11.6 本章總結 335

第12 章 在Unity 3D 中使用AssetBundle 336

12.1 初識AssetBundle 336

12.2 使用AssetBundle 的工作流程 337

12.2.1 開發階段 337

12.2.2 運行階段 340

12.3 如何使用本地磁碟中的AssetBundle 檔案 344

12.4 AssetBundle 檔案的平台兼容性 345

12.5 AssetBundle 如何識別資源 345

12.6 本章總結 346

第13 章 Unity 3D 最佳化 347

13.1 看看Unity 3D 最佳化需要從哪裡著手 347

13.2 CPU 方面的最佳化 348

13.2.1 對DrawCall 的最佳化 348

13.2.2 對物理組件的最佳化 354

13.2.3 處理記憶體,卻讓CPU 受傷的GC 355

13.2.4 對代碼質量的最佳化 356

13.3 對GPU 的最佳化 357

13.3.1 減少繪製的數目 358

13.3.2 最佳化顯存頻寬 358

13.4 記憶體的最佳化 359

13.4.1 Unity 3D 的內部記憶體 359

13.4.2 Mono 的託管記憶體 360

13.5 本章總結 363

第14 章 Unity 3D 的腳本編譯 365

14.1 Unity 3D 腳本編譯流程概覽 365

14.2 JIT 即時編譯 368

14.2.1 使用編譯器將遊戲腳本編譯為託管模組 368

14.2.2 託管模組和程式集 369

14.2.3 使用JIT 編譯執行程式集的代碼 370

14.2.4 使用JIT 即時編譯的優勢 371

14.3 AOT 提前編譯 372

14.3.1 在Unity 3D 中使用AOT 編譯 372

14.3.2 iOS 平台和Full-AOT 編譯 373

14.3.3 AOT 編譯的優勢 374

14.4 誰偷了我的熱更新?Mono、JIT 還是iOS 374

14.4.1 從一個常見的報錯說起 375

14.4.2 美麗的JIT 377

14.4.3 模擬JIT 的過程 378

14.4.4 iOS 平台的自我保護 381

14.5 Unity 3D 項目的編譯與發布 382

14.5.1 選擇遊戲場景和目標平台 382

14.5.2 Unity 3D 發布項目的內部過程 384

14.5.3 Unity 3D 部署到Android 平台 384

14.5.4 Unity 3D 部署到iOS 平台 386

14.6 本章總結 389

相關詞條

相關搜尋

熱門詞條

聯絡我們