Unity 作為一個成熟的游戲引擎,其設(shè)計和使用都是有層次的。本書共 13 章,第 1 章至第 3 章為基礎(chǔ)知識部分,主要介紹 Unity 的基本操作、基本概念、編寫腳本的方法、導(dǎo)入和使用資源的方法,學(xué)完這部分內(nèi)容后,你已經(jīng)可以做出很多有趣的小游戲了。第 4 章至第 11 章主要介紹 Unity 重要的系統(tǒng)模塊、功能,包括物理系統(tǒng)、UI 界面系統(tǒng)、動畫系統(tǒng)、3D 數(shù)學(xué)基礎(chǔ)、場景管理、導(dǎo)航系統(tǒng)、著色器系統(tǒng)、打包與發(fā)布等,讀完以后可以掌握高級的開發(fā)技術(shù)并解決實際問題。第 12 章和第 13 章是兩個有代表性的 Unity游戲示例,一個是 3D 跑酷游戲,另一個是 2D 的彈球游戲,綜合展示了 Unity 的大部分功能,具有較強的代表性。除了這些內(nèi)容,每章都會有一些小的示例,以方便大家實踐并理解具體概念。由于實例部分的內(nèi)容操作流程較多,不易用圖文展現(xiàn),本書還特別附贈了視頻教程來方便讀者學(xué)習(xí)。本書適合廣大 Unity 初學(xué)者入門時使用,也適合 Unity 用戶查閱和參考軟件具體的使用方法、注意事項等,所以也可以作為一本 Unity 的參考手冊使用。
馬遙,知乎專欄《游戲開發(fā)入門指南》主編/作者,《Practical Game AI Programming》 譯者,電子科技大學(xué)成都學(xué)院外聘講師,Levelplay皮皮關(guān)游戲創(chuàng)始人/CEO。具有多年游戲開發(fā)從業(yè)經(jīng)歷,同時對主流游戲引擎如Unity,Unreal, Cocos都有豐富項目經(jīng)驗。
第 1 章 初識 Unity /. 1
1.1 下載與安裝 / 1
1.1.1 下載 Unity 安裝程序 / 1
1.1.2 安裝 Unity / 2
1.1.3 多版本并存 / 2
1.2 初次運行 / 2
1.2.1 工程頁面 / 2
1.2.2 學(xué)習(xí)資料頁面 / 3
1.2.3 新建工程 / 3
1.2.4 打開工程 / 3
1.3 工程窗口 / 4
1.3.1 基本功能 / 5
1.3.2 搜索功能 / 5
1.3.3 搜索資源商店 / 6
1.3.4 快捷鍵 / 7
1.4 場景視圖窗口 / 8
1.4.1 瀏覽場景 / 8
1.4.2 場景輔助線框 / 8
1.4.3 修改物體的位置 /. 10
1.4.4 場景視圖工具條 /. 14
1.5 輔助線框菜單 / 16
1.5.1 輔助線框 / 16
1.5.2 輔助圖標(biāo) / 17
1.5.3 顯示網(wǎng)格 / 18
1.5.4 選中時高亮和選中框線 . 18
1.5.5 內(nèi)置組件的顯示 /. 19
1.6 層級窗口 / 19
1.6.1 父子關(guān)系 / 19
1.6.2 將物體設(shè)置為子物體 20
1.6.3 同時編輯多個場景 /. 20
1.7 檢視窗口 / 20
1.7.1 檢視物體和選項 /.21
1.7.2 添加、刪除組件 /.21
1.7.3 復(fù)制組件或組件參數(shù) 22
1.7.4 查看腳本參數(shù) /.22
1.7.5 查看素材 /23
1.7.6 工程設(shè)置 /24
1.7.7 修改組件的順序 /.24
1.8 工具欄 /.25
1.9 游戲視圖窗口 /25
1.9.1 播放和暫停 /26
1.9.2 游戲視圖的工具條 /.26
1.9.3 自定義 Unity 的開發(fā)環(huán)境 27
1.10 Unity 的常用快捷鍵 /29
1.11 動手搭建游戲場景/31
1.12 2D 與 3D 工程的區(qū)別 /36
1.13 總結(jié) /37
第 2 章 開始 Unity 游戲開發(fā) / 39
2.1 場景 /39
2.1.1 場景的概念 /39
2.1.2 保存場景 /40
2.1.3 打開場景 /40
2.2 游戲物體 /40
2.3 組件 /41
2.3.1 變換組件 /41
2.3.2 其他組件 /42
2.4 使用組件 /42
2.4.1 添加組件 /43
2.4.2 編輯組件 /44
2.4.3 組件選項菜單 /45
2.4.4 測試組件參數(shù) /45
2.5 最基本的組件 — 變換組件 /46
2.5.1 屬性列表 /46
2.5.2 編輯變換組件 /46
2.5.3 父子關(guān)系 /47
2.5.4 非等比縮放的問題 /47
2.5.5 關(guān)于縮放和物體大小的問題/48
2.5.6 變換組件的其他注意事項 / 48
2.6 腳本與組件操作 /49
2.6.1 創(chuàng)建和使用腳本 /49
2.6.2 初識腳本 / 49
2.6.3 用腳本控制游戲物體 50
2.6.4 變量與檢視窗口 /51
2.6.5 通過組件控制游戲物體 /52
2.6.6 訪問其他游戲物體 /53
2.6.7 常用的事件函數(shù) /.55
2.6.8 時間和幀率 / 56
2.6.9 創(chuàng)建和銷毀物體 /.57
2.6.10 使游戲物體或組件無效化 /58
2.6.11 父物體無效化 / 58
2.7 腳本組件的生命期 /58
2.8 標(biāo)簽 /61
2.8.1 為物體設(shè)置標(biāo)簽 /61
2.8.2 創(chuàng)建新的標(biāo)簽 /62
2.8.3 小提示 / 62
2.9 靜態(tài)物體 / 62
2.10 層級 /63
2.10.1 新建層級 / 63
2.10.2 為物體指定層級 /64
2.10.3 僅渲染場景的一部分 /64
2.10.4 選擇性的射線檢測 /65
2.11 預(yù)制體 / 66
2.11.1 使用預(yù)制體 / 66
2.11.2 通過游戲物體實例修改預(yù)制體 /67
2.11.3 在運行時實例化預(yù)制體 /67
2.12 保存工程的注意事項 / 71
2.12.1 保存當(dāng)前場景 / 71
2.12.2 保存工程 / 72
2.12.3 不需要保存的改動 /73
2.13 輸入 /74
2.13.1 傳統(tǒng)輸入設(shè)備與虛擬輸入軸 /74
2.13.2 移動設(shè)備的輸入 /77
2.13.3 VR 輸入概覽 / 81
2.14 方向與旋轉(zhuǎn)的表示方法 / 81
2.14.1 歐拉角 / 81
2.14.2 四元數(shù) /82
2.14.3 直接使用四元數(shù) /83
2.14.4 在動畫中表示旋轉(zhuǎn) /84
2.15 燈光 /85
2.15.1 渲染路徑 /85
2.15.2 燈光的種類 /86
2.15.3 燈光設(shè)置詳解 /89
2.15.4 使用燈光 /90
2.16 攝像機 /91
2.16.1 屬性介紹 /91
2.16.2 細(xì)節(jié) /93
2.16.3 渲染路徑 /93
2.16.4 清除標(biāo)記 /93
2.16.5 剪切面 /95
2.16.6 剔除遮罩 /96
2.16.7 視圖矩形 /96
2.16.8 正交攝像機 /96
2.16.9 渲染貼圖 /96
2.16.10 顯示目標(biāo) /97
2.16.11 其他提示 /97
2.17 開始做游戲吧 /97
第 3 章 資源工作流程 / 98
3.1 內(nèi)置的基礎(chǔ)物體/98
3.1.1 立方體 /98
3.1.2 球體 /99
3.1.3 膠囊體 /99
3.1.4 柱體 /99
3.1.5 平面 /.100
3.1.6 四邊形 / 100
3.2 資源導(dǎo)入 / 101
3.3 資源導(dǎo)入設(shè)置 / 103
3.4 導(dǎo)入圖片資源的設(shè)置 / 103
3.4.1 圖片資源的導(dǎo)入方式 /103
3.4.2 圖片紋理的類型 /104
3.5 模型資源的導(dǎo)入流程 /110
3.5.1 導(dǎo)入人形動畫 / 111
3.5.2 導(dǎo)入非人形動畫 / 113
3.5.3 模型資源導(dǎo)入設(shè)置 /115
3.6 聲音資源的導(dǎo)入設(shè)置 / 137
3.7 從資源商店導(dǎo)入資源 / 137
3.7.1 進入資源商店和選購 /137
3.7.2 下載的資源文件的存儲位置 /138
3.8 資源包 / 139
3.8.1 導(dǎo)入包 / 139
3.8.2 導(dǎo)出包 / 140
3.8.3 導(dǎo)出更新包 / 141
3.9 標(biāo)準(zhǔn)資源 / 142
第 4 章 物理 /143
4.1 簡介 /143
4.2 概述基本概念 /143
4.2.1 剛體 /143
4.2.2 休眠 /144
4.2.3 碰撞體 / 144
4.2.4 物理材質(zhì) / 145
4.2.5 觸發(fā)器 / 145
4.2.6 碰撞與腳本行為 /145
4.2.7 對碰撞體按照處理方式分類 /145
4.2.8 碰撞事件觸發(fā)表 /.146
4.2.9 物理關(guān)節(jié) / 147
4.2.10 角色控制器 / 147
4.3 剛體 /148
4.3.1 屬性介紹 / 148
4.3.2 父子關(guān)系 / 149
4.3.3 腳本問題 / 149
4.3.4 剛體和動畫 / 149
4.3.5 剛體和碰撞體 /. 150
4.3.6 組合碰撞體 / 150
4.3.7 連續(xù)碰撞檢測 / 150
4.3.8 比例和單位的重要性 / 151
4.3.9 其他問題 / 152
4.4 盒子碰撞體 / 152
4.5 膠囊碰撞體 / 152
4.6 網(wǎng)格碰撞體 / 153
4.6.1 屬性 /153
4.6.2 限制條件和解決方法 / 154
4.6.3 其他問題 / 155
4.7 球體碰撞體 / 155
4.8 地形碰撞體 / 156
4.9 物理材質(zhì) / 156
4.10 固定關(guān)節(jié) / 157
4.11 鉸鏈關(guān)節(jié) / 158
4.12 彈簧關(guān)節(jié) / 160
4.13 角色控制器 / 161
4.13.1 屬性 / 161
4.13.2 詳細(xì)說明 / 162
4.13.3 調(diào)整參數(shù)的技巧 / 162
4.13.4 防止角色被卡住 / 162
4.13.5 小技巧 / 163
4.14 常量力 / 163
4.14.1 屬性 / 163
4.14.2 小技巧 / 163
4.15 車輪碰撞體 / 163
4.15.1 屬性 / 164
4.15.2 詳細(xì)說明 / 164
4.15.3 具體的設(shè)置方法 /165
4.15.4 碰撞體的外形問題 /165
4.15.5 車輪阻尼曲線 /.165
4.15.6 小技巧 / 166
4.16 車輛創(chuàng)建入門 / 166
4.16.1 創(chuàng)建車輛的基本框架 / 166
4.16.2 可控制的車輛 / 167
4.16.3 車輪的外觀 /168
4.17 物理系統(tǒng)的實踐 / 169
4.17.1 不倒翁的制作 / 169
4.17.2 鎖鏈的制作 /.173
4.18 物理系統(tǒng)可視化調(diào)試/ 177
第 5 章 UI 界面 /181
5.1 UI 組件 /181
5.1.1 渲染組件 / 181
5.1.2 布局組件 / 183
5.1.3 顯示組件 / 185
5.1.4 交互組件 / 187
5.1.5 事件功能 / 196
5.2 UI 進階 /201
5.2.1 圖集 /.201
5.2.2 圖片格式 / 202
5.2.3 渲染順序 / 202
5.2.4 實現(xiàn)圓盤轉(zhuǎn)動的效果 /204
第 6 章 動畫 /.210
6.1 基礎(chǔ)概念 / 210
6.1.1 什么是幀 / 210
6.1.2 模型動畫與非模型動畫 . 210
6.1.3 動畫混合的核心 — 插值與權(quán)重 211
6.2 Mecanim 動畫系統(tǒng) /. 211
6.2.1 動畫系統(tǒng)的工作流 211
6.2.2 動畫剪輯 / 213
6.3 動畫控制器 / 223
6.3.1 動畫狀態(tài)機 / 223
6.3.2 動畫層級 / 228
6.3.3 動畫混合樹 / 228
6.4 使用人形角色動畫 /. 231
6.4.1 人形骨架映射 /. 231
6.4.2 人形動畫身體遮罩 234
6.4.3 人形動畫的重定向 235
6.4.4 逆向運動學(xué) / 237
6.5 實踐:實現(xiàn)一個帶有動畫且操作流暢的角色控制器 238
6.5.1 創(chuàng)建工程 / 238
6.5.2 模型下載 / 239
6.5.3 創(chuàng)建動畫狀態(tài)機 /. 239
6.5.4 配置動畫狀態(tài)機 /. 241
6.5.5 代碼控制 / 243
第 7 章 游戲開發(fā)的數(shù)學(xué)基礎(chǔ) / 245
7.1 坐標(biāo)系 / 245
7.1.1 左手坐標(biāo)系、右手坐標(biāo)系 /245
7.1.2 世界坐標(biāo)系 / 246
7.1.3 局部坐標(biāo)系 / 246
7.1.4 屏幕坐標(biāo)系 / 247
7.2 向量 /248
7.2.1 向量的加法 / 248
7.2.2 向量的減法 / 248
7.2.3 點乘 /248
7.2.4 叉乘 / 249
7.2.5 Vector3 結(jié)構(gòu)體 /249
7.2.6 位置與向量的區(qū)別和聯(lián)系 /250
7.2.7 Vector3 的用法 /251
7.3 矩陣 /252
7.4 齊次坐標(biāo) / 253
7.5 四元數(shù) / 253
7.5.1 概念 /253
7.5.2 結(jié)構(gòu)體的簡介 /254
7.5.3 四元數(shù)的操作示例 /255
7.6 本章小結(jié) / 258
第 8 章 場景管理 / 259
8.1 多場景編輯 / 259
8.1.1 在編輯器中打開多個場景 /259
8.1.2 場景分隔欄菜單 /260
8.1.3 多場景烘焙光照貼圖 /261
8.1.4 多場景烘焙尋路網(wǎng)格 /261
8.1.5 多場景烘焙遮擋剔除信息 /261
8.1.6 多場景運行游戲 /262
8.1.7 場景相關(guān)設(shè)置 /262
8.1.8 注意事項 / 262
8.2 運行時的場景管理 / 263
8.2.1 場景管理類 / 263
8.2.2 運行時切換場景 /263
8.2.3 切換場景時不銷毀游戲物體 /265
8.2.4 異步加載場景 /266
第 9 章 導(dǎo)航系統(tǒng) / 268
9.1 概述 /268
9.2 導(dǎo)航系統(tǒng)內(nèi)部的工作機制 / 269
9.2.1 可行走區(qū)域 / 269
9.2.2 尋路算法 / 269
9.2.3 具體路徑 / 270
9.2.4 避開障礙 / 270
9.2.5 讓代理移動 / 270
9.2.6 全局導(dǎo)航與局部導(dǎo)航 /270
9.2.7 障礙的兩個例子 /. 271
9.2.8 鏈接關(guān)系 / 271
9.3 導(dǎo)航系統(tǒng)的構(gòu)建組件 / 271
9.3.1 導(dǎo)航代理組件 / 271
9.3.2 導(dǎo)航障礙物 / 273
9.3.3 網(wǎng)格鏈接組件 /.274
9.4 構(gòu)建導(dǎo)航網(wǎng)格 /275
9.5 創(chuàng)建導(dǎo)航代理 /277
9.6 創(chuàng)建導(dǎo)航障礙物 /278
9.7 創(chuàng)建網(wǎng)格鏈接 /.279
9.8 自動構(gòu)建網(wǎng)格鏈接 /.280
9.9 建立高度網(wǎng)格 / 281
9.10 導(dǎo)航區(qū)域和移動成本 / 282
9.10.1 尋路成本 / 283
9.10.2 區(qū)域類型 / 283
9.10.3 區(qū)域掩碼 / 284
9.11 新版導(dǎo)航系統(tǒng)組件 / 284
9.11.1 導(dǎo)航網(wǎng)格表面組件 /284
9.11.2 導(dǎo)航網(wǎng)格修正組件 /286
9.11.3 導(dǎo)航修正區(qū)域組件 /287
9.11.4 導(dǎo)航網(wǎng)格鏈接組件 /287
9.11.5 構(gòu)建導(dǎo)航網(wǎng)格的 API /289
9.12 與其他組件一起使用的問題 /291
9.12.1 導(dǎo)航代理組件與物理組件混用 /291
9.12.2 導(dǎo)航網(wǎng)格組件與動畫組件混用 /291
第 10 章 著色器 / 293
10.1 Unity 著色器的簡介 / 293
10.2 編寫表面著色器/ 293
10.2.1 簡介 / 294
10.2.2 預(yù)處理指令 /295
10.2.3 表面著色器的輸入結(jié)構(gòu)體 / 297
10.3 ShaderLab 簡介 /297
10.3.1 語法 / 298
10.3.2 屬性 / 298
10.3.3 子著色器與回滾 /298
10.3.4 例子 /298
10.4 材質(zhì)、著色器、貼圖的關(guān)系 /299
10.5 表面著色器的實例 / 300
10.5.1 從最簡單的例子開始 /300
10.5.2 貼圖 / 301
10.5.3 法線貼圖 / 302
10.5.4 邊緣發(fā)光 / 303
10.5.5 細(xì)節(jié)貼圖 / 304
10.5.6 屏幕空間中的細(xì)節(jié)貼圖 /305
10.5.7 立方體反射 / 306
10.5.8 世界空間切片 /307
10.5.9 修改頂點的位置 /308
10.5.10 逐頂點的數(shù)據(jù)處理 /309
10.5.11 調(diào)整最終顏色 / 310
10.5.12 霧 / 311
10.5.13 總結(jié) / 312
第 11 章 打包與發(fā)布 / 313
11.1 打包設(shè)置 / 313
11.2 發(fā)布設(shè)置菜單 /313
11.3 發(fā)布為桌面程序/ 314
11.4 發(fā)布時的內(nèi)部流程/ 314
11.5 發(fā)布為安卓應(yīng)用程序/.315
11.5.1 JDK 概述 / 315
11.5.2 JDK 的下載、安裝 /315
11.5.3 配置環(huán)境變量 /316
11.5.4 SDK 概述 /317
11.5.5 下載安卓 SDK / 317
11.5.6 導(dǎo)出設(shè)置 / 319
第 12 章 示例教程——跑酷游戲 / 323
12.1 準(zhǔn)備工具 / 323
12.2 分析需求 / 323
12.3 控制人物動作 /323
12.4 生成地圖 / 324
12.4.1 創(chuàng)建地圖模板 /324
12.4.2 設(shè)置地圖生成規(guī)則 /325
12.4.3 使地圖運動 /326
12.4.4 生成道具 / 329
12.4.5 復(fù)雜地形 / 330
12.5 控制人物 / 333
12.5.1 分析人物動作 / 333
12.5.2 添加角色控制器 /333
12.5.3 向前移動 / 333
12.5.4 左右移動 / 334
12.5.5 左轉(zhuǎn)與右轉(zhuǎn) /334
12.5.6 跳躍與下滑 /334
12.5.7 播放道路動畫 /335
12.6 游戲音效 / 336
12.6.1 背景音效 / 336
12.6.2 道具音效 / 336
12.7 顯示得分 / 337
12.8 觸摸控制 / 338
12.8.1 向量的點乘 /338
12.8.2 代碼實現(xiàn) / 339
第 13 章 示例教程——2D 物理彈球 /343
13.1 游戲玩法 / 343
13.2 分析需求 / 345
13.3 搭建場景 / 345
13.3.1 砌墻(限定小球的活動區(qū)域)/345
13.3.2 創(chuàng)建槍口(用于初始化小球的發(fā)射位置)/346
13.3.3 顯示分?jǐn)?shù) / 347
13.3.4 創(chuàng)建小球 / 347
13.3.5 創(chuàng)建道具預(yù)制件 /347
13.3.6 創(chuàng)建幾何圖形 /352
13.3.7 創(chuàng)建關(guān)卡 / 353
13.3.8 發(fā)射 / 359
13.3.9 小球?qū)ぢ?/ 362
13.3.10 菜單面板 / 364
13.3.11 總結(jié) / 366