Unity 3D 游戲開發, 3/e

宣雨松

  • 出版商: 人民郵電
  • 出版日期: 2023-10-01
  • 定價: $779
  • 售價: 8.5$662
  • 語言: 簡體中文
  • 頁數: 778
  • ISBN: 7115624682
  • ISBN-13: 9787115624680
  • 相關分類: 遊戲引擎 Game-engine
  • 下單後立即進貨 (約4週~6週)

  • Unity 3D 游戲開發, 3/e-preview-1
  • Unity 3D 游戲開發, 3/e-preview-2
Unity 3D 游戲開發, 3/e-preview-1

買這商品的人也買了...

商品描述

本書分為兩大部分,其中第一部分“基礎篇”包括第1~11章,第二部分“進階篇”包括第12~18章。Unity 3D初學者在學習第一部分後,完全可以製作出屬於自己的游戲。但是能做出來不代表做得好,這里的“好”主要是指游戲性能高以及開發難度大。從商業游戲的角度來說,必須做到這兩點,所以第二部分主要講解Unity 3D的性能與原理。除第1章外,書中的每一章都包含豐富的示例和源代碼,它們是非常寶貴的實戰經驗,可以直接應用在實際開發中。

作者簡介

宣雨松,雨松MOMO技术博客博主,15年以上游戏开发经验,Unity终身价值专家,UUG北京站负责人。

目錄大綱

第 一部分 基礎篇

第 1章 基礎知識 2

1.1 Unity簡介 2

1.2 跨平臺 2

1.3 協作開發 3

1.4 Unity版本 4

1.5 Package Manager 5

1.6 示例項目與發布 7

1.7 Unity服務 8

1.8 小結 9

第 2章 編輯器的結構 10

2.1 Unity Hub 10

2.2 編輯器佈局 11

2.3 Project視圖 12

2.4 Hierarchy視圖 13

2.5 Inspector視圖 14

2.6 Scene視圖 15

2.7 Game視圖 16

2.8 導航欄視圖 17

2.9 小結 17

第3章 游戲腳本 18

3.1 C#運行時 18

3.2 C#與引擎交互 22

3.3 游戲對象 27

3.4 游戲組件 29

3.4.1 Transform(變換)組件 29

3.4.2 Mesh Filter(網格過濾器)組件 30

3.4.3 Mesh Renderer(網格渲染)組件 31

3.4.4 Skinned Mesh Renderer(蒙皮網格渲染)組件 32

3.5 游戲腳本 35

3.6 腳本的生命周期 35

3.6.1 初始化和銷毀 37

3.6.2 二次初始化 38

3.6.3 固定更新 39

3.6.4 內置協程回調 43

3.6.5 鼠標事件 45

3.6.6 腳本邏輯更新 46

3.6.7 場景渲染 47

3.6.8 編輯器UI 更新 48

3.7 腳本的管理 50

3.7.1 腳本的執行順序 50

3.7.2 多腳本優化 51

3.8 腳本序列化 52

3.8.1 查看數據 53

3.8.2 序列化數據標簽 54

3.8.3 SerializedObject 55

3.8.4 監聽修改事件 56

3.8.5 序列化/反序列化監聽 58

3.8.6 序列化嵌套 60

3.8.7 序列化引用 61

3.8.8 序列化繼承 62

3.8.9 ScriptableObject 63

3.9 腳本屬性 65

3.9.1 序列化屬性 65

3.9.2 Header屬性 66

3.9.3 編輯模式下執行腳本 66

3.9.4 枚舉序列化別名 67

3.9.5 必須包含的組件 68

3.9.6 其他UI擴展面板 68

3.9.7 可選擇屬性 69

3.9.8 自定義屬性 69

3.10 協程任務 70

3.10.1 異步代碼流程 71

3.10.2 當前幀最後執行 71

3.10.3 定時器 73

3.10.4 CustomYieldInstruction 75

3.10.5 Awaitable 76

3.11 通過腳本操作對象和組件 78

3.11.1 對象的創建與刪除 78

3.11.2 對象層級排序 80

3.11.3 對象子節點的獲取 80

3.11.4 多場景根節點 81

3.11.5 腳本的添加與刪除 82

3.11.6 DontDestroyOnLoad 83

3.12 調試 83

3.13 小結 85

第4章 UGUI 86

4.1 游戲界面 86

4.1.1 Text組件 86

4.1.2 富文本 89

4.1.3 描邊和陰影 91

4.1.4 動態字體 92

4.1.5 字體花屏 93

4.1.6 Text Mesh Pro 94

4.1.7 SDF字體 97

4.1.8 圖文混排 99

4.1.9 樣式 101

4.1.10 文字fallback 103

4.1.11 點擊事件 104

4.1.12 Image組件 105

4.1.13 Raw Image組件 107

4.1.14 Button組件 109

4.1.15 Toggle組件 110

4.1.16 Scroll View組件 111

4.1.17 其他組件 113

4.2 界面佈局 114

4.2.1 Rect Transform組件 114

4.2.2 拉伸 117

4.2.3 自動佈局 118

4.2.4 文本自適應 120

4.2.5 Layout Element組件 121

4.2.6 Layout Group組件 122

4.2.7 Content Size Fitter組件 123

4.3 Canvas組件 126

4.3.1 UI攝像機 126

4.3.2 3D界面 128

4.3.3 自適應UI 130

4.3.4 Canvas與3D排序 133

4.3.5 裁剪 135

4.3.6 裁剪粒子 136

4.4 Atlas 137

4.4.1 創建Atlas 138

4.4.2 讀取Atlas 139

4.4.3 Variant 140

4.4.4 監聽加載事件 140

4.4.5 多圖集管理 141

4.5 事件系統 141

4.5.1 Graphic Raycaster組件 142

4.5.2 UI事件 143

4.5.3 UI事件管理 144

4.5.4 UnityAction和UnityEvent 146

4.5.5 C#事件系統 147

4.5.6 3D事件 148

4.5.7 K幀動畫 149

4.5.8 使用Scroll Rect組件製作游戲搖桿 150

4.5.9 點擊區域優化 151

4.5.10 顯示幀率 152

4.5.11 查看UGUI源代碼 153

4.6 小結 153

第5章 UI Toolkit 154

5.1 UI Toolkit簡介 154

5.2 UI Builder編輯器 154

5.2.1 StyleSheets視圖 156

5.2.2 Hierarchy視圖 159

5.2.3 Library視圖 161

5.2.4 Viewport視圖 162

5.2.5 Inspector視圖 64

5.3 UI組件 180

5.3.1 Text組件 181

5.3.2 Visual Element組件 183

5.3.3 其他UI組件 184

5.3.4 基礎容器 185

5.3.5 ScrollView組件 186

5.3.6 ListView組件 188

5.3.7 ListView事件 190

5.3.8 TreeView組件 191

5.3.9 GroupBox組件 192

5.3.10 控制組件 192

5.3.11 加載與嵌套 195

5.3.12 自適應UI 196

5.3.13 動態圖集 198

5.3.14 自定義UI組件 199

5.4 事件系統 200

5.4.1 點擊事件 200

5.4.2 焦點事件 201

5.4.3 鍵盤事件 202

5.4.4 拖動事件 202

5.5 進階技巧 203

5.5.1 3D與2D坐標轉換 203

5.5.2 覆蓋樣式 204

5.5.3 多樣式管理 206

5.5.4 調試 207

5.5.5 編輯器窗口面板 208

5.5.6 編輯器腳本面板 209

5.5.7 編輯器組合面板 210

5.5.8 佈局與裁剪 211

5.5.9 與UGUI混合使用 213

5.5.10 UI動畫 213

5.6 UI Toolkit渲染 214

5.6.1 IMGUI 214

5.6.2 UGUI 214

5.6.3 圖集 214

5.6.4 UI Toolkit與UGUI的比較 216

5.7 UI Toolk學習資料 217

5.8 小結 218

第6章 2D游戲開發 219

6.1 Sprite Renderer組件 220

6.1.1 渲染原理 222

6.1.2 渲染排序 224

6.1.3 裁剪 226

6.1.4 2D幀動畫 227

6.1.5 腳本播放動畫 231

6.1.6 2D骨骼動畫 232

6.1.7 IK反向運動 238

6.1.8 精靈資源庫 239

6.2 Tile地圖 241

6.2.1 創建Tile 242

6.2.2 創建地圖 243

6.2.3 編輯Tile 245

6.2.4 Tile排序 247

6.2.5 擴展筆刷 248

6.2.6 擴展Tile 251

6.2.7 更新Tile 252

6.2.8 Tile動畫 253

6.3 2D物理系統 254

6.3.1 Collider 2D組件 254

6.3.2 Rigidbody 2D組件 255

6.3.3 碰撞事件 257

6.3.4 碰撞方向 259

6.3.5 觸發器監聽 261

6.3.6 復合碰撞體 262

6.3.7 自定義碰撞體 263

6.3.8 Effectors 2D組件 264

6.3.9 關節 264

6.3.10 物理材質和恆定力 264

6.3.11 計算區域 265

6.4 像素風 265

6.5 精靈形狀 267

6.6 精靈編輯器 268

6.7 小結 270

第7章 3D游戲開發 271

7.1 Renderer 271

7.1.1 Mesh Renderer(網格渲染器) 271

7.1.2 Skinned Mesh Renderer(蒙皮網格渲染器) 273

7.1.3 Particle System(粒子系統) 275

7.1.4 Trail Renderer(拖尾渲染器) 276

7.1.5 Line Renderer(線渲染器) 276

7.1.6 Terrain(地形) 277

7.2 游戲對象和資源 278

7.2.1 靜態對象 278

7.2.2 標記 279

7.2.3 層 280

7.2.4 Prefab 280

7.2.5 Prefab嵌套 282

7.2.6 Prefab和游戲對象 285

7.2.7 實例化 286

7.2.8 游戲資源 287

7.2.9 場景 289

7.2.10 場景模板 291

7.3 動畫系統 293

7.3.1 動畫文件 293

7.3.2 製作動畫 296

7.3.3 動畫事件 297

7.3.4 骨骼動畫優化 298

7.3.5 播放動畫 300

7.3.6 切換動畫 301

7.3.7 動畫混合 302

7.3.8 老版動畫 304

7.3.9 Simple Animation組件 305

7.3.10 控制動畫進度 307

7.3.11 特殊動畫行為 308

7.3.12 Playable組件 309

7.3.13 使用Playable自定義腳本 312

7.3.14 模型換裝 313

7.4 3D物理系統 316

7.4.1 角色控制器 316

7.4.2 碰撞體 319

7.4.3 Rigidbody組件 321

7.4.4 碰撞事件 321

7.4.5 布娃娃系統 323

7.4.6 布料系統 324

7.4.7 其他 325

7.5 輸入系統 325

7.5.1 實體輸入事件 326

7.5.2 虛擬輸入事件 327

7.5.3 鼠標位置 328

7.5.4 點選模型 330

7.5.5 通過點擊控制移動 332

7.5.6 射線 333

7.6 Transform組件 334

7.6.1 控制角色移動 335

7.6.2 攝像機跟隨 336

7.6.3 插值移動 337

7.6.4 約束條件 338

7.7 小結 339

第8章 靜態對象 340

8.1 光照貼圖 341

8.1.1 光源 341

8.1.2 開始烘焙 342

8.1.3 烘焙結果在不同平臺上的差異 346

8.1.4 烘焙貼圖UV 347

8.1.5 光照探針 348

8.1.6 運行時更換烘焙貼圖 349

8.1.7 復制烘焙信息 350

8.1.8 復制工具 351

8.2 反射探針 352

8.3 遮擋剔除 354

8.3.1 遮擋關系 354

8.3.2 遮擋與被遮擋事件 356

8.3.3 動態剔除 356

8.3.4 遮擋剔除的原理 356

8.3.5 裁剪組 357

8.4 靜態合批 358

8.4.1 設置靜態合批 358

8.4.2 腳本靜態合批 360

8.4.3 動態合批 361

8.5 導航網格 361

8.5.1 設置尋路 362

8.5.2 動態阻擋 364

8.5.3 連接兩點 365

8.5.4 連接兩個區域 366

8.5.5 烘焙修改器 366

8.5.6 運行時烘焙 367

8.5.7 獲取尋路路徑 368

8.5.8 導出導航網格信息 369

8.6 小結 372

第9章 持久化數據 373

9.1 Excel 373

9.1.1 EPPlus 374

9.1.2 讀取Excel文件 374

9.1.3 寫入Excel文件 376

9.2 SQLite 377

9.2.1 創建數據庫 378

9.2.2 跨平臺讀取數據庫 379

9.3 JSON 382

9.3.1 JsonUtility 382

9.3.2 JSON支持字典 384

9.3.3 Newtonsoft Json 385

9.4 文件的讀取與寫入 386

9.4.1 PlayerPrefs 386

9.4.2 EditorPrefs 387

9.4.3 用PlayerPrefs保存復雜的數據結構 388

9.4.4 PlayerPrefs版本升級 389

9.4.5 文件讀寫 389

9.4.6 文件流 390

9.4.7 打包後讀寫文本 392

9.4.8 PersistentDataPath目錄 393

9.5 XML 393

9.5.1 創建XML字符串 393

9.5.2 讀取與修改 394

9.5.3 XML文件 395

9.5.4 XML與JSON的轉換 397

9.6 YAML 397

9.6.1 YamlDotNet 398

9.6.2 序列化和反序列化 398

9.7 生成代碼 400

9.7.1 把數據從Excel表導出到數據庫 400

9.7.2 運行時讀取數據 402

9.7.3 RazorEngine 403

9.7.4 生成代碼的條件 404

9.7.5 模板文件 405

9.8 小結 406

第 10章 多媒體 407

10.1 音頻 407

10.1.1 音頻文件 407

10.1.2 Audio Source 408

10.1.3 3D音頻 410

10.1.4 代碼控制播放 411

10.1.5 AudioMixer 412

10.1.6 混音區 414

10.1.7 麥克風 415

10.1.8 聲音進度 416

10.2 視頻 417

10.2.1 視頻文件 417

10.2.2 視頻渲染模式 419

10.2.3 視頻自適應 420

10.2.4 UI覆蓋在視頻之上 421

10.2.5 視頻渲染在材質上 422

10.2.6 視頻渲染在紋理上 422

10.2.7 播放網絡視頻 423

10.2.8 自定義視頻顯示 424

10.2.9 視頻進度 425

10.2.10 下載視頻 425

10.2.11 全景視頻 426

10.3 小結 426

第 11章 Netcode與網絡編程 427

11.1 UnityWebRequest 427

11.1.1 下載文件和上傳文件 428

11.1.2 下載進度與異常 429

11.1.3 驗證文件 431

11.1.4 DownloadHandlerScript 431

11.1.5 控制下載速度 433

11.2 Socket 436

11.2.1 拼接包 439

11.2.2 Protocol Buffer 440

11.3 Netcode 442

11.3.1 托管服務器 443

11.3.2 UNet與Netcode的區別 445

11.3.3 前後端同步 446

11.3.4 軟連接 448

11.3.5 同步坐標 450

11.3.6 服務器RPC 452

11.3.7 客戶端RPC 454

11.3.8 網絡變量 457

11.3.9 網絡場景 459

11.3.10 網絡底層消息 460

11.3.11 FastBufferWriter與FastBufferReader 463

11.3.12 網絡連接事件 464

11.3.13 網絡對象 465

11.3.14 隱藏與顯示 467

11.3.15 前後端時間 468

11.3.16 網絡腳本內置方法 469

11.3.17 前後端打包 469

11.3.18 密碼 472

11.4 小結 474

第二部分 進階篇

第 12章 渲染管線 476

12.1 SRP 476

12.1.1 SRP Core 479

12.1.2 安裝與配置 480

12.1.3 攝像機組件工具 482

12.1.4 Look Dev 483

12.1.5 Render Graph Viewer 484

12.1.6 對URP的展望 485

12.2 URP 489

12.2.1 URP調試與修改 489

12.2.2 URP與內置渲染管線對比 491

12.2.3 升級著色器 503

12.2.4 LightMode 509

12.2.5 Shader Graph 510

12.2.6 Renderer Pipeline Asset 512

12.2.7 Renderer Pipeline Asset Data 516

12.2.8 URP Global Settings 519

12.2.9 URP Renderer Feature 520

12.3 SRP Batch 527

12.3.1 不透明物體繪制 527

12.3.2 半透明物體繪制 528

12.3.3 Early-Z 529

12.3.4 Alpha Test 529

12.3.5 Alpha Blend 530

12.3.6 Set Pass Call與Draw Call 531

12.3.7 SRP Batch原理 534

12.3.8 SRP Batch使用 536

12.4 渲染技術 538

12.4.1 Blinn-Phong光照計算 538

12.4.2 PBR光照計算 540

12.4.3 陰影 543

12.4.4 渲染數據傳遞 546

12.4.5 SRP流程 549

12.4.6 GPU渲染管線 550

12.4.7 SRP裁剪 553

12.4.8 前向渲染流程 554

12.4.9 多攝像機與FinalBlit 557

12.4.10 ScriptableRenderPass 560

12.5 自定義渲染管線 562

12.5.1 參與渲染的對象 562

12.5.2 MVP矩陣計算 563

12.5.3 Render Objects 566

12.5.4 Rendering Layer Mask 568

12.5.5 自定義Render Feature 569

12.5.6 裁剪與層 571

12.5.7 後處理與自定義 573

12.5.8 UI部分模糊 576

12.5.9 降低分辨率不包含UI 576

12.6 小結 578

第 13章 DOTS 1.0 579

13.1 DOTS的組成 579

13.1.1 ECS簡介 581

13.1.2 Job System簡介 583

13.1.3 Burst Compiler簡介 584

13.1.4 安裝 585

13.2 游戲對象轉到ECS 585

13.2.1 傳統的對象與組件 585

13.2.2 Entity(實體)586

13.2.3 Archetype(原型)587

13.2.4 Component(組件)589

13.2.5 System(系統)591

13.3 實體組件 592

13.3.1 非托管組件 592

13.3.2 托管組件 593

13.3.3 共享組件 593

13.3.4 清理組件 594

13.3.5 標記組件 595

13.3.6 動態緩沖組件 595

13.3.7 Chunk組件 596

13.3.8 啟動組件 598

13.4 系統 599

13.4.1 系統組件 600

13.4.2 系統分組與排序 601

13.4.3 系統遍歷 602

13.4.4 系統查詢 603

13.4.5 寫組與版本號 604

13.4.6 SystemAPI.Query 606

13.5 Job 607

13.5.1 線程與同步 608

13.5.2 Job的種類 610

13.5.3 Entity Command Buffers實體緩沖 611

13.6 Burst 612

13.6.1 啟動Burst 613

13.6.2 高性能C# 615

13.6.3 Unity.Mathematics數學庫 617

13.7 渲染 619

13.7.1 自定義材質 620

13.7.2 更換模型材質 621

13.7.3 修改材質屬性 622

13.7.4 GPU Instancing 624

13.7.5 BatchRendererGroup 627

13.7.6 Aspect包裝器 629

13.7.7 調試 630

13.8 小結 634

第 14章 擴展編輯器 635

14.1 擴展Project視圖 635

14.1.1 擴展右鍵菜單 635

14.1.2 創建腳本模板 637

14.1.3 擴展佈局 639

14.1.4 監聽資源導入 640

14.1.5 監聽資源修改事件 641

14.1.6 自定義資源導入類型 642

14.2 擴展Hierarchy視圖 643

14.2.1 擴展菜單 643

14.2.2 擴展佈局 644

14.2.3 自動選擇游戲對象 645

14.3 擴展Inspector視圖 645

14.3.1 擴展原生組件 646

14.3.2 擴展繼承組件 646

14.3.3 限制組件編輯 648

14.3.4 Context菜單 649

14.4 擴展Scene視圖 650

14.4.1 工具欄擴展 650

14.4.2 輔助元素 651

14.4.3 輔助UI 652

14.4.4 常駐輔助UI 653

14.5 擴展Game視圖 654

14.6 導航欄擴展 654

14.6.1 自定義菜單 655

14.6.2 菜單項自動執行 655

14.6.3 導航條 656

14.6.4 標題欄擴展 657

14.6.5 默認面板 658

14.7 查看源代碼 658

14.8 小結 659

第 15章 資源管理 660

15.1 編輯器模式 660

15.1.1 游戲資源 660

15.1.2 加載資源 661

15.1.3 卸載資源 663

15.1.4 創建與修改資源 663

15.1.5 創建與修改游戲對象 664

15.2 運行模式 665

15.2.1 參與打包的資源 665

15.2.2 Resources 666

15.2.3 通過腳本計算依賴 667

15.2.4 StreamingAssets 668

15.2.5 場景資源 668

15.3 AssetBundle 668

15.3.1 設置AB 669

15.3.2 設置依賴 670

15.3.3 純腳本打包 671

15.3.4 差異打包 672

15.3.5 AB壓縮格式 672

15.3.6 加載AB 673

15.3.7 內存與卸載 674

15.3.8 場景AB 675

15.3.9 CDN下載流程 675

15.3.10 加載流程 676

15.3.11 多進程AB構建 676

15.4 代碼編譯 677

15.4.1 Plugins 677

15.4.2 Assembly 677

15.4.3 Editor 678

15.4.4 IL2CPP 678

15.4.5 AB中的腳本 679

15.4.6 熱更新代碼 680

15.5 Shader(著色器)編譯 682

15.5.1 打包與運行 682

15.5.2 Shader重復打包 682

15.5.3 Shader宏 683

15.5.4 Shader與AB包 686

15.5.5 Shader打包剝離 686

15.6 美術資源管理 688

15.6.1 版本管理 688

15.6.2 材質丟失 689

15.6.3 協作開發與多工程 689

15.6.4 美術資源生成 690

15.7 小結 690

第 16章 自動化與打包 691

16.1 自動化設置資源 691

16.1.1 設置貼圖格式 691

16.1.2 動畫控制器 694

16.1.3 設置模型格式 695

16.1.4 導出動畫文件 695

16.1.5 生成角色Prefab 696

16.1.6 生成場景 697

16.1.7 場景無法保存 699

16.1.8 自動生成UI圖集 699

16.1.9 更換Shader殘留宏 700

16.1.10 自動生成變種收集器 703

16.1.11 剔除頂點色 704

16.2 自動化打包 705

16.2.1 打包過程中的事件 706

16.2.2 打包機的選擇 707

16.2.3 打包後自動壓縮 707

16.2.4 調用shell腳本 708

16.2.5 命令行打開工程 709

16.2.6 腳本化打包參數 711

16.2.7 Jenkins 712

16.3 小結 714

第 17章 代碼優化 715

17.1 Unity代碼優化 715

17.1.1 緩存對象 715

17.1.2 減少腳本 716

17.1.3 減少Update()執行 716

17.1.4 緩存池 717

17.1.5 日誌優化 718

17.2 C#代碼優化 719

17.2.1 入棧和出棧 720

17.2.2 值類型和引用類型 721

17.2.3 裝箱和拆箱 722

17.2.4 字符串 723

17.2.5 struct 724

17.2.6 GC 725

17.3 Profiler內存管理 726

17.3.1 內存泄漏 726

17.3.2 耗時函數統計 727

17.3.3 自定義採樣 729

17.3.4 堆內存分配 730

17.3.5 原生內存分配 731

17.3.6 Unity內存 732

17.3.7 Memory Profiler 733

17.3.8 真機Profiler 735

17.3.9 Profiler寫入和讀取 736

17.3.10 渲染性能調試 737

17.4 著色器優化 739

17.4.1 頂點著色器 740

17.4.2 片元著色器 741

17.4.3 條件分支 742

17.5 小結 742

第 18章 通用案例與優化 743

18.1 客戶端框架 743

18.1.1 UI框架 743

18.1.2 UI代碼生成 745

18.1.3 協議代碼生成 746

18.1.4 其他代碼生成 747

18.1.5 數據監聽 747

18.1.6 事件管理器 749

18.2 客戶端優化與案例 752

18.2.1 懶加載 752

18.2.2 懶加載UI 752

18.2.3 懶加載UI 特效 754

18.2.4 編輯與運行時加載資源 756

18.2.5 資源名與路徑 758

18.2.6 異步加載 759

18.2.7 界面返回 760

18.2.8 過度繪制 760

18.2.9 UGUI網格重建 763

18.2.10 RaycastTarget優化 765

18.2.11 小地圖優化 766

18.2.12 覆蓋材質 766

18.2.13 通用Shader面板 767

18.2.14 離線合並貼圖 770

18.2.15 運行時合並ASTC貼圖 771

18.2.16 運行時合並圖集 773

18.2.17 運行時合並網格 774

18.2.18 Prefab嵌套與只讀 776

18.2.19 AB文件合並 777

18.3 小結 778