Unity 3D腳本編程與游戲開(kāi)發(fā)
本書(shū)以游戲開(kāi)發(fā)為主要線索,全面講解Unity 3D的編程技術(shù),涵蓋Unity 3D引擎的各個(gè)系統(tǒng)與模塊。全書(shū)從幫助讀者迅速建立腳本編程和游戲開(kāi)發(fā)的框架思路開(kāi)始講起,逐步闡述Unity 3D游戲開(kāi)發(fā)的核心概念,以及對(duì)游戲開(kāi)發(fā)至關(guān)重要的物理系統(tǒng)和3D數(shù)學(xué)基礎(chǔ)等技術(shù)基礎(chǔ)。然后針對(duì)游戲中的界面、動(dòng)畫(huà)、特效與音頻等Unity 3D各個(gè)常用模塊的使用方法進(jìn)行講解,并詳細(xì)介紹游戲開(kāi)發(fā)中數(shù)據(jù)管理與資源管理相關(guān)的知識(shí)。隨后通過(guò)潛入型游戲的完整案例將本書(shū)所講知識(shí)融會(huì)貫通。最后,講解游戲人工智能開(kāi)發(fā)技術(shù),以及對(duì)象池等高級(jí)編程技術(shù),幫助讀者提升應(yīng)對(duì)實(shí)際工作的能力。
本書(shū)內(nèi)容全面,講解細(xì)致,適合游戲開(kāi)發(fā)的初學(xué)者入門,也適合相關(guān)培訓(xùn)機(jī)構(gòu)作為教材。
1.精選豐富實(shí)踐案例,精講游戲開(kāi)發(fā)技術(shù);
2.詳解Unity腳本編程思路,突破核心難點(diǎn);
3.總結(jié)一線游戲開(kāi)發(fā)經(jīng)驗(yàn),提高學(xué)習(xí)效率;
4.學(xué)習(xí)資源豐富:
·所有案例的配套工程文件
·180分鐘實(shí)例制作過(guò)程的教學(xué)視頻
馬遙,從高中時(shí)代起就與游戲開(kāi)發(fā)結(jié)下不解之緣。平時(shí)喜歡研究動(dòng)態(tài)語(yǔ)言和算法,擅長(zhǎng)講解復(fù)雜的算法和概念。曾在北京像素軟件公司任職,開(kāi)發(fā)大型網(wǎng)絡(luò)游戲《尋仙》,創(chuàng)業(yè)時(shí)期主持過(guò)多款手游和HTML5游戲的開(kāi)發(fā),后專注于高性能游戲服務(wù)器設(shè)計(jì)。目前從事游戲開(kāi)發(fā)教育工作,希望帶領(lǐng)更多人走進(jìn)游戲開(kāi)發(fā)的世界。
曾編著圖書(shū)《Unity 3D完全自學(xué)教程》(電子工業(yè)出版社),翻譯圖書(shū)《游戲AI開(kāi)發(fā)實(shí)用指南》(機(jī)械工業(yè)出版社)。
沈琰,狂熱的游戲玩家和獨(dú)立游戲開(kāi)發(fā)者,長(zhǎng)期活躍于游戲開(kāi)發(fā)論壇與社區(qū)。業(yè)余時(shí)間致力于學(xué)習(xí)和分享優(yōu)秀的國(guó)外教程,翻譯整理的長(zhǎng)篇系列教程Hex Map獲得游戲開(kāi)發(fā)者廣泛贊譽(yù)。
在游戲開(kāi)發(fā)的實(shí)踐中積累了不少精彩有趣的游戲Demo,他重新整理了一些優(yōu)秀的實(shí)例,在本書(shū)中與讀者分享。
第 1章 Unity腳本概覽 9
1.1 控制物體的運(yùn)動(dòng) 10
1.1.1 新建腳本 10
1.1.2 Start和Update事件 11
1.1.3 修改物體位置 13
1.1.4 讀取和處理輸入 14
1.1.5 實(shí)例:實(shí)現(xiàn)一個(gè)移動(dòng)的小球 15
1.2 觸發(fā)器事件 16
1.2.1 創(chuàng)建觸發(fā)器 16
1.2.2 觸發(fā)器事件函數(shù) 17
1.2.3 實(shí)例:吃金幣 18
1.3 制作第 一個(gè)游戲:3D滾球跑酷 20
1.3.1 游戲設(shè)計(jì) 20
1.3.2 功能實(shí)現(xiàn) 21
1.3.3 游戲機(jī)制 22
1.3.4 完成和完善游戲 24
第 2章 Unity基本概念與腳本編程 27
2.1 Unity基本概念 28
2.1.1 游戲物體和組件 28
2.1.2 變換組件 31
2.1.3 “父子關(guān)系”詳解 33
2.1.4 物體的標(biāo)簽和層 36
2.1.5 常用組件 36
2.2 用腳本獲取物體和組件 38
2.2.1 物體、組件和對(duì)象 38
2.2.2 獲取組件的方法 39
2.2.3 獲取物體的方法 40
2.2.4 在物體和組件之間任意遨游 42
2.2.5 利用公開(kāi)變量引用物體和組件 46
2.3 用腳本創(chuàng)建物體 49
2.3.1 預(yù)制體 49
2.3.2 創(chuàng)建物體 50
2.3.3 創(chuàng)建組件 52
2.3.4 銷毀物體或組件 53
2.3.5 定時(shí)創(chuàng)建和銷毀物體 54
2.4 腳本的生命周期 55
2.4.1 理解腳本的生命周期 56
2.4.2 常見(jiàn)的事件方法 56
2.4.3 實(shí)例:跟隨主角的攝像機(jī) 58
2.4.4 觸發(fā)器事件 59
2.5 協(xié)程入門 61
2.6 實(shí)例:3D射擊游戲 63
2.6.1 游戲總體設(shè)計(jì) 63
2.6.2 游戲的實(shí)現(xiàn)要點(diǎn) 63
2.6.3 創(chuàng)建主角 64
2.6.4 調(diào)整攝像機(jī) 66
2.6.5 實(shí)現(xiàn)武器系統(tǒng)和子彈 66
2.6.6 實(shí)現(xiàn)敵人角色 71
2.6.7 子彈擊中的邏輯 73
2.6.8 完善游戲 75
2.6.9 測(cè)試和改進(jìn) 76
第3章 物理系統(tǒng) 77
3.1 物理系統(tǒng)基本概念 78
3.1.1 剛體 78
3.1.2 休眠 78
3.1.3 碰撞體 79
3.1.4 物理材質(zhì) 80
3.1.5 觸發(fā)器 80
3.1.6 碰撞體的分類 81
3.1.7 碰撞事件表 82
3.1.8 層 83
3.1.9 物理關(guān)節(jié) 83
3.1.10 射線檢測(cè) 84
3.1.11 角色控制器與物理系統(tǒng) 84
3.1.12 3D物理系統(tǒng)與2D物理系統(tǒng) 85
3.2 物理系統(tǒng)腳本編程 86
3.2.1 獲取剛體組件 86
3.2.2 施加作用力 86
3.2.3 修改速度 87
3.2.4 射線的使用方法 88
3.2.5 層和層遮罩 90
3.2.6 射線編程詳解 90
3.2.7 修改物理材質(zhì) 93
3.2.8 FixedUpdate詳解 94
3.2.9 修改角速度 96
3.2.10 質(zhì)心 96
3.2.11 更多施加力的方式 97
3.2.12 剛體約束 98
3.3 實(shí)例:基于物理系統(tǒng)的2D平臺(tái)闖關(guān)游戲 99
3.3.1 游戲設(shè)計(jì) 99
3.3.2 功能實(shí)現(xiàn) 99
3.3.3 游戲機(jī)制 100
3.3.4 完成和完善游戲 103
第4章 游戲開(kāi)發(fā)數(shù)學(xué)基礎(chǔ) 107
4.1 數(shù)學(xué)對(duì)游戲的重要性 108
4.2 坐標(biāo)系 109
4.2.1 世界坐標(biāo)系 109
4.2.2 左手坐標(biāo)系與右手坐標(biāo)系 109
4.2.3 局部坐標(biāo)系 110
4.2.4 屏幕坐標(biāo)系 112
4.3 向量 112
4.3.1 向量加法 113
4.3.2 向量減法 113
4.3.3 向量的數(shù)乘 114
4.3.4 向量的點(diǎn)積 114
4.3.5 向量的叉積 115
4.3.6 Vector3結(jié)構(gòu)體 116
4.3.7 位置與向量的關(guān)聯(lián) 117
4.3.8 向量坐標(biāo)系的轉(zhuǎn)換 118
4.4 矩陣簡(jiǎn)介 119
4.4.1 常用矩陣介紹 119
4.4.2 齊次坐標(biāo) 120
4.5 四元數(shù) 120
4.5.1 萬(wàn)向節(jié)鎖定 120
4.5.2 四元數(shù)的概念 121
4.5.3 Quaternion結(jié)構(gòu)體 122
4.5.4 理解和運(yùn)用四元數(shù) 123
4.5.5 四元數(shù)的插值 125
4.5.6 朝向與向量 125
4.6 實(shí)例:第 一人稱視角的角色控制器 127
4.6.1 搭建簡(jiǎn)單場(chǎng)景 127
4.6.2 創(chuàng)建主角物體 127
4.6.3 編寫控制腳本——移動(dòng)部分 128
4.6.4 編寫控制腳本——旋轉(zhuǎn)部分 129
4.6.5 隱藏并鎖定鼠標(biāo)指針 131
4.6.6 整理和完善 131
第5章 腳本與UI系統(tǒng) 133
5.1 用腳本操作常用UI控件 134
5.1.1 創(chuàng)建游戲界面 134
5.1.2 矩形變換(Rect Transform)組件 135
5.1.3 圖片(Image)組件 137
5.1.4 文本(Text)組件 138
5.1.5 按鈕(Button)組件 139
5.1.6 單選框(Toggle)組件 141
5.1.7 滑動(dòng)條(Slider)組件 142
5.1.8 輸入框(Input Field)組件 143
5.1.9 滾動(dòng)區(qū)域(Scroll Rect)組件 144
5.2 腳本與事件系統(tǒng) 146
5.2.1 常用輸入事件 147
5.2.2 常用輸入事件的參數(shù) 150
5.2.3 動(dòng)態(tài)添加事件響應(yīng)方法 151
5.2.4 事件觸發(fā)器(Event Trigger) 152
5.2.5 動(dòng)態(tài)綁定事件的高級(jí)技巧 153
5.3 實(shí)例:界面制作與適配 155
5.3.1 設(shè)置UI畫(huà)布 156
5.3.2 制作游戲界面的準(zhǔn)備 159
5.3.3 制作游戲界面 161
5.3.4 制作背包界面 163
5.3.5 利用進(jìn)度條制作血條 164
第6章 腳本與動(dòng)畫(huà)系統(tǒng) 165
6.1 動(dòng)畫(huà)系統(tǒng)基本概念 166
6.1.1 動(dòng)畫(huà)的基本概念 166
6.1.2 動(dòng)畫(huà)融合 167
6.1.3 動(dòng)畫(huà)狀態(tài)機(jī) 168
6.1.4 根骨骼動(dòng)畫(huà) 170
6.2 2D動(dòng)畫(huà)實(shí)例分析 171
6.2.1 準(zhǔn)備工作 171
6.2.2 角色與控制的制作步驟 173
6.2.3 動(dòng)畫(huà)的制作步驟 175
6.2.4 創(chuàng)建動(dòng)畫(huà)變量 176
6.2.5 設(shè)置動(dòng)畫(huà)過(guò)渡 177
6.2.6 用腳本修改動(dòng)畫(huà)變量 178
6.2.7 腳本編程重點(diǎn)提示 179
6.2.8 總結(jié)和拓展 180
6.3 三維模型與動(dòng)畫(huà)的導(dǎo)入 181
6.3.1 導(dǎo)入示例 181
6.3.2 三維模型資源設(shè)置 181
6.3.3 三維動(dòng)畫(huà)資源設(shè)置 183
6.3.4 模型骨骼與動(dòng)畫(huà)骨骼的關(guān)系 185
6.4 動(dòng)畫(huà)進(jìn)階技術(shù)實(shí)例分析 187
6.4.1 動(dòng)畫(huà)融合樹(shù) 187
6.4.2 第三人稱角色控制的腳本分析 189
6.4.3 根骨骼動(dòng)畫(huà)的運(yùn)用 193
6.4.4 動(dòng)畫(huà)遮罩 195
6.4.5 動(dòng)畫(huà)層 196
6.4.6 動(dòng)畫(huà)幀事件 197
6.4.7 反向動(dòng)力學(xué)(IK) 198
第7章 腳本與特效 201
7.1 特效總覽 202
7.1.1 粒子 202
7.1.2 動(dòng)畫(huà) 202
7.1.3 動(dòng)效 202
7.1.4 貼花 203
7.1.5 拖尾 203
7.1.6 后期處理 203
7.2 特效的使用方法 204
7.2.1 各種特效的基本使用方法 204
7.2.2 動(dòng)效與緩動(dòng)動(dòng)畫(huà) 208
7.2.3 DOTween插件使用方法簡(jiǎn)介 209
7.2.4 拖尾特效 214
7.2.5 后期處理舉例 216
第8章 腳本與音頻 219
8.1 音頻基礎(chǔ)概念 220
8.1.1 音源與音頻偵聽(tīng)器 220
8.1.2 音源組件詳解 220
8.2 腳本與音樂(lè)、音效 221
8.2.1 用腳本控制音樂(lè)播放 222
8.2.2 添加音效實(shí)例 223
8.2.3 音頻管理器 225
第9章 腳本與資源管理 229
9.1 工程與資源 230
9.1.1 Unity項(xiàng)目的文件夾結(jié)構(gòu) 230
9.1.2 META文件 231
9.1.3 動(dòng)態(tài)加載和釋放資源 232
9.2 資產(chǎn)包與熱更新 233
9.2.1 資產(chǎn)包(Asset Bundles) 234
9.2.2 資源的常用路徑 236
9.2.3 資產(chǎn)的依賴關(guān)系 237
9.2.4 從網(wǎng)絡(luò)加載資源 238
9.2.5 熱更新淺析 239
第 10章 數(shù)據(jù)的保存與加載 243
10.1 腳本與序列化 244
10.1.1 序列化的概念 244
10.1.2 簡(jiǎn)單存儲(chǔ)PlayerPrefs 244
10.2 腳本與JSON 246
10.2.1 JSON簡(jiǎn)介 246
10.2.2 安裝LitJSON庫(kù) 249
10.2.3 讀取JSON 252
10.2.4 保存JSON 255
10.2.5 在網(wǎng)絡(luò)中使用JSON 257
10.3 其他序列化方法 258
10.3.1 C#的序列化庫(kù) 258
10.3.2 二進(jìn)制序列化實(shí)例 259
10.3.3 序列化與Unity編輯器的聯(lián)系 261
第 11章 腳本與游戲AI 263
11.1 游戲AI綜述 264
11.1.1 游戲AI的特點(diǎn) 264
11.1.2 常用AI技術(shù) 265
11.1.3 AI的層次 265
11.2 腳本與導(dǎo)航系統(tǒng) 266
11.2.1 導(dǎo)航系統(tǒng)相關(guān)組件 266
11.2.2 構(gòu)建導(dǎo)航網(wǎng)格 266
11.2.3 創(chuàng)建導(dǎo)航代理 268
11.2.4 導(dǎo)航障礙物 270
11.2.5 導(dǎo)航鏈接 272
11.2.6 導(dǎo)航系統(tǒng)補(bǔ)充說(shuō)明 273
11.2.7 導(dǎo)航綜合實(shí)例 274
11.3 游戲AI的編程方法 277
11.3.1 有限狀態(tài)機(jī)的概念 277
11.3.2 模擬AI視覺(jué) 280
11.3.3 游戲AI實(shí)例 285
11.3.4 擴(kuò)展AI狀態(tài)機(jī) 289
11.3.5 其他AI編程技術(shù) 291
第 12章 綜合實(shí)例——秘密敢死隊(duì) 293
12.1 游戲設(shè)計(jì) 294
12.1.1 潛行類游戲簡(jiǎn)介 294
12.1.2 游戲總體設(shè)計(jì) 294
12.2 素材導(dǎo)入和場(chǎng)景搭建 295
12.2.1 下載并導(dǎo)入素材 295
12.2.2 布置場(chǎng)景 295
12.3 游戲主角的制作 296
12.3.1 創(chuàng)建角色 296
12.3.2 創(chuàng)建動(dòng)畫(huà) 296
12.3.3 實(shí)現(xiàn)角色移動(dòng) 297
12.3.4 切換武器和道具 301
12.3.5 添加武器掛點(diǎn) 302
12.3.6 實(shí)現(xiàn)武器和道具的基本功能 303
12.3.7 武器和道具的控制 308
12.3.8 完善主角動(dòng)畫(huà) 311
12.3.9 完善主角游戲邏輯 312
12.3.10 實(shí)現(xiàn)拋物線指示器 312
12.4 敵人角色的制作 314
12.4.1 創(chuàng)建敵人角色和動(dòng)畫(huà) 314
12.4.2 敵人角色腳本框架 315
12.4.3 實(shí)現(xiàn)巡邏邏輯 319
12.4.4 實(shí)現(xiàn)視覺(jué)感知 320
12.4.5 實(shí)現(xiàn)追擊功能 322
12.4.6 實(shí)現(xiàn)攻擊功能 323
12.4.7 組合并實(shí)現(xiàn)完整的AI角色 324
12.4.8 敵人的參數(shù)設(shè)置 326
12.5 搭建關(guān)卡并完善游戲 327
12.5.1 關(guān)卡設(shè)計(jì)的示例 327
12.5.2 添加成功和失敗的邏輯 328
第 13章 進(jìn)階編程技術(shù) 329
13.1 對(duì)象池 330
13.1.1 為什么要使用對(duì)象池 330
13.1.2 簡(jiǎn)易對(duì)象池實(shí)例 330
13.1.3 對(duì)象池測(cè)試方法 332
13.1.4 性能分析器 334
13.1.5 支持多種物體的對(duì)象池 335
13.2 Unity協(xié)程詳解 339
13.2.1 熟悉而陌生的協(xié)程 339
13.2.2 迭代器 340
13.2.3 協(xié)程的延時(shí)執(zhí)行原理 341
13.2.4 協(xié)程與遞歸 344
13.3 Unity事件詳解 346
13.3.1 Unity事件實(shí)例 346
13.3.2 Unity事件的多參數(shù)形式 348
13.3.3 Unity事件與委托 350