前言
Irrlicht(鬼火)引擎是一款用C++編寫的高性能3D引擎,是經(jīng)典的3D游戲引擎之一,可以應(yīng)用于在C++程序中開發(fā)3D游戲。該引擎提供商業(yè)級(jí)別的藝術(shù)特性,如動(dòng)態(tài)陰影、粒子系統(tǒng)、角色動(dòng)畫、碰撞檢測(cè)等。Irrlicht引擎的優(yōu)點(diǎn)有:精悍的引擎框架,和Orge極其相似;高質(zhì)量的圖形渲染,雖然沒有Orge的質(zhì)量?jī)?yōu)越,但是與一般商業(yè)引擎相比仍然略勝一籌;清晰單一的C++語(yǔ)言實(shí)現(xiàn),使得引擎沒有繁冗龐大的外部腳本編譯器;支持根據(jù)硬件加速調(diào)整渲染模塊的參數(shù)和算法機(jī)制。整體程序會(huì)跑得很快、很流暢,但是畫質(zhì)會(huì)降低,是犧牲畫質(zhì)而保證性能。
游戲開發(fā),特別是3D游戲開發(fā)是當(dāng)前非常熱門的一門學(xué)科,但是目前高校計(jì)算機(jī)專業(yè)開設(shè)的有關(guān)游戲方面的課程比較少,而且大多偏向于理論。鑒于此,本書將在講解3D游戲開發(fā)基礎(chǔ)理論知識(shí)的同時(shí),選擇Irrlicht游戲引擎對(duì)這些技術(shù)進(jìn)行具體的實(shí)現(xiàn),使大家能夠理解一些三維圖形的理論知識(shí),對(duì)游戲引擎有一個(gè)具體的了解,從而知道3D游戲開發(fā)的基本過程。這樣能夠使想要從事游戲開發(fā)、對(duì)游戲開發(fā)感興趣的朋友逐漸入門,掌握游戲設(shè)計(jì)的精髓。
本書內(nèi)容
本書共分為15章,包括Irrlicht游戲引擎,編寫第一個(gè)Irrlicht程序,Irrlicht圖形學(xué)基礎(chǔ),網(wǎng)格、紋理、覆蓋層,場(chǎng)景管理,攝像機(jī),地形、紋理和渲染,光照與材質(zhì),聲音,粒子系統(tǒng),碰撞檢測(cè),數(shù)據(jù)和文件的處理,著色器,游戲人工智能,部署一個(gè)Irrlicht應(yīng)用程序等。
本書特點(diǎn)
本書以實(shí)例的形式向讀者展示Irrlicht的編程精髓,將3D游戲設(shè)計(jì)的理論基礎(chǔ)、技巧等方面的知識(shí)融入其中,從淺入深、從易到難地講解。書中實(shí)例豐富、講解清晰、盡量避免代碼復(fù)雜冗長(zhǎng)。恰當(dāng)?shù)膶?shí)例特別有助于初學(xué)者仿效理解,進(jìn)而把握問題的精髓,在實(shí)踐中掌握和領(lǐng)會(huì)3D游戲開發(fā)的基本技巧和思想精髓。
作者簡(jiǎn)介
許志聞,吉林大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院教授、博士生導(dǎo)師,中國(guó)計(jì)算機(jī)學(xué)會(huì)多媒體專業(yè)委員會(huì)委員,中國(guó)圖形、圖像學(xué)會(huì)多媒體專業(yè)委員會(huì)委員。2006年,美國(guó)佐治亞大學(xué)高級(jí)訪問學(xué)者。主要研究方向?yàn)橛?jì)算機(jī)圖形學(xué)、動(dòng)畫與游戲、虛擬現(xiàn)實(shí)、圖像處理、網(wǎng)絡(luò)多媒體和生物信息學(xué)等。
此外,參與本書創(chuàng)作的還有李偉、朱明會(huì)、李楊、王剛、姜曉巍等人,在此表示感謝。
讀者對(duì)象
本書適合C++游戲編程初學(xué)者和具有一定編程經(jīng)驗(yàn)的C++游戲編程人員,也可作為高等院校和培訓(xùn)學(xué)校游戲軟件開發(fā)課程的教學(xué)參考書。
編者
2017年3月
許志聞,吉林大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院教授、博士生導(dǎo)師,中國(guó)計(jì)算機(jī)學(xué)會(huì)多媒體專業(yè)委員會(huì)委員,中國(guó)圖形、圖像學(xué)會(huì)多媒體專業(yè)委員會(huì)委員。2006年,美國(guó)佐治亞大學(xué)高級(jí)訪問學(xué)者。主要研究方向?yàn)橛?jì)算機(jī)圖形學(xué)、動(dòng)畫與游戲、虛擬現(xiàn)實(shí)、圖像處理、網(wǎng)絡(luò)多媒體和生物信息學(xué)等。
第1章 Irrlicht游戲引擎 1
1.1 Irrlicht使用許可與系統(tǒng)要求 1
1.2 獲得Irrlicht引擎 2
1.3 在Windows下設(shè)置編譯器 4
1.3.1 設(shè)置編譯器的原理 4
1.3.2 設(shè)置動(dòng)態(tài)鏈接庫(kù)的方法 5
1.3.3 其他設(shè)置方法 10
1.3.4 環(huán)境變量的設(shè)置方法 11
1.3.5 設(shè)置過程中常見的問題 12
1.4 重新編譯Irrlicht引擎 13
1.5 測(cè)試是否已經(jīng)正確設(shè)置 15
1.6 在Linux環(huán)境中使用鬼火游戲引擎 16
1.6.1 在Linux下編譯靜態(tài)庫(kù) 16
1.6.2 編譯Hello World程序并運(yùn)行 17
1.6.3 在Linux下創(chuàng)建第一個(gè)項(xiàng)目 18
1.6.4 第三方編程工具Code::Blocks 19
第2章 編寫第一個(gè)Irrlicht程序 20
2.1 Irrlicht引擎的結(jié)構(gòu) 20
2.1.1 引入命名空間 20
2.1.2 了解Irrlicht引擎的結(jié)構(gòu) 21
2.2 分析簡(jiǎn)單的代碼 21
2.3 簡(jiǎn)單的擴(kuò)展 24
2.4 類的形式 26
2.5 讓窗口顯示內(nèi)容 28
2.6 比較成型的模式 29
2.7 讓我們的程序發(fā)生變化 30
第3章 圖形學(xué)基礎(chǔ) 33
3.1 計(jì)算機(jī)顯示原理 33
3.1.1 圖形系統(tǒng)的硬件 33
3.1.2 光柵掃描系統(tǒng) 34
3.1.3 計(jì)算機(jī)圖形標(biāo)準(zhǔn) 35
3.2 圖形學(xué)的數(shù)學(xué)基礎(chǔ) 36
3.2.1 向量及向量運(yùn)算 36
3.2.2 坐標(biāo) 36
3.2.3 基本幾何變換 38
3.2.4 三維空間的變換 40
3.3 雙緩存和垂直同步 42
3.4 紋理 43
3.5 Z緩沖 45
3.6 攝像機(jī) 46
3.7 粒子系統(tǒng) 47
第4章 網(wǎng)格、紋理、覆蓋層 50
4.1 網(wǎng)格簡(jiǎn)介 50
4.2 不同格式網(wǎng)格模型的區(qū)別 52
4.3 初識(shí)紋理 54
4.4 動(dòng)態(tài)網(wǎng)格模型 56
4.5 覆蓋層 59
4.6 使用精靈表 63
4.7 繪制基本圖形 67
第5章 場(chǎng)景管理 69
5.1 場(chǎng)景節(jié)點(diǎn)和實(shí)體 69
5.1.1 場(chǎng)景節(jié)點(diǎn) 69
5.1.2 實(shí)體 71
5.2 場(chǎng)景節(jié)點(diǎn)類型 72
5.3 場(chǎng)景管理器 74
5.4 動(dòng)態(tài)節(jié)點(diǎn) 74
5.5 場(chǎng)景的應(yīng)用示例 77
5.5.1 場(chǎng)景節(jié)點(diǎn)的應(yīng)用 77
5.2.2 動(dòng)態(tài)節(jié)點(diǎn)的應(yīng)用 81
5.5.3 自定義場(chǎng)景節(jié)點(diǎn) 83
第6章 攝像機(jī) 87
6.1 攝像機(jī)投影 87
6.1.1 正交投影 88
6.1.2 透視投影 89
6.1.3 兩種投影在代碼上的實(shí)現(xiàn) 90
6.2 裁剪 92
6.3 攝像機(jī)觀看視角的類型 95
6.3.1 普通攝像機(jī) 95
6.3.2 第一人稱射擊攝像機(jī) 95
6.3.3 Maya攝像機(jī) 96
6.4 FPS攝像機(jī)的使用示例 96
第7章 地形、紋理和渲染 99
7.1 地形場(chǎng)景節(jié)點(diǎn)類 99
7.2 高度圖 101
7.3 紋理 102
7.3.1 紋理簡(jiǎn)介 102
7.3.2 使用紋理 103
7.4 渲染示例 106
7.4.1 渲染地形 106
7.4.2 紋理渲染 111
7.5 創(chuàng)建地形 114
第8章 光照與材質(zhì) 119
8.1 光照模型 119
8.2 光源 119
8.3 深入光源 120
8.3.1 模擬環(huán)境光 121
8.3.2 模擬漫射光 123
8.3.3 燈光的衰減 123
8.4 光源 124
8.4.1 光源的類型 124
8.4.2 光源屬性 125
8.4.3 添加燈光 126
8.5 一些簡(jiǎn)單的光照示例 127
8.5.1 用代碼實(shí)現(xiàn)環(huán)境光 127
8.5.2 用代碼實(shí)現(xiàn)漫射光 129
8.5.3 用代碼實(shí)現(xiàn)鏡面反射光 132
8.6 材質(zhì) 135
8.7 陰影 136
8.8 著色 137
8.8.1 著色模式 137
8.8.2 設(shè)置著色模式 138
8.9 示例 138
8.9.1 光照和材質(zhì)示例 138
8.9.2 顯示實(shí)時(shí)動(dòng)態(tài)陰影 140
第9章 聲 音 144
9.1 聲音基礎(chǔ) 144
9.1.1 聲音的生成 144
9.1.2 聲音的編碼存儲(chǔ) 145
9.1.3 聲音的合成 146
9.2 irrKlang簡(jiǎn)介 146
9.3 irrKlang的使用 147
9.3.1 實(shí)踐 Hello World 147
9.3.2 播放3D聲音文件 151
9.3.3 聲音特效 154
第10章 粒子系統(tǒng) 157
10.1 粒子系統(tǒng)簡(jiǎn)介 157
10.2 粒子編輯器——irrEdit 158
10.2.1 添加自己的粒子系統(tǒng) 158
10.2.2 設(shè)置粒子系統(tǒng) 159
10.3 粒子系統(tǒng)各部分的代碼實(shí)現(xiàn) 160
10.3.1 粒子結(jié)構(gòu) 160
10.3.2 發(fā)射器 161
10.3.3 影響器 163
10.4 繪制一個(gè)粒子系統(tǒng) 164
10.4.1 編寫代碼完成一個(gè)簡(jiǎn)單的粒子系統(tǒng) 164
10.4.2 使用代碼制作水面 169
10.4.3 環(huán)形粒子系統(tǒng) 173
第11章 碰撞檢測(cè) 177
11.1 碰撞檢測(cè)概述 177
11.2 幾何和數(shù)學(xué)知識(shí) 178
11.2.1 多邊形和多面體 178
11.2.2 BSP樹 179
11.2.3 空間四叉樹和空間八叉樹 179
11.2.4 Minkowski和與Minkowski差 180
11.2.5 包圍體 181
11.3 常用的碰撞檢測(cè)算法 183
11.3.1 距離跟蹤法 183
11.3.2 基于圖像空間的碰撞檢測(cè)法 183
11.3.3 空間分解法 184
11.3.4 層次包圍盒法 185
11.4 代碼解析 185
第12章 數(shù)據(jù)和文件的處理 192
12.1 Irrlicht文件系統(tǒng)簡(jiǎn)介 192
12.2 文件的讀取和寫入 194
12.2.1 寫文件 194
12.2.2 普通文件的讀寫 195
12.2.3 一行一行讀取和按分隔符讀取 198
12.2.4 XML文件的讀寫 200
12.2.5 從XML文件中加載數(shù)據(jù) 201
12.2.6 向XML文件寫入數(shù)據(jù) 204
12.2.7 從XML文件中讀取特殊數(shù)據(jù)類型的數(shù)據(jù) 205
12.3 從檔案中讀取數(shù)據(jù) 207
第13章 著色器 210
13.1 圖形渲染管線簡(jiǎn)介 210
13.2 著色器簡(jiǎn)介 211
13.2.1 頂點(diǎn)著色器 211
13.2.2 片斷(像素)著色器 211
13.2.3 幾何著色器 212
13.3 使用著色器 212
13.3.1 安裝并使用GLSL demo 212
13.3.2 在Irrlicht引擎中使用著色器 214
13.4 進(jìn)一步了解著色器 223
第14章 游戲人工智能 224
14.1 什么是智能 224
14.2 什么是游戲AI 225
14.3 AI的組成與設(shè)計(jì) 226
14.3.1 抉擇與推理 226
14.3.2 解決方案的類型 226
14.3.3 智能體的反應(yīng)能力 226
14.3.4 系統(tǒng)的真實(shí)性 226
14.3.5 游戲類型 227
14.3.6 游戲內(nèi)容 227
14.3.7 游戲平臺(tái) 227
14.4 AI的輸入處理和感知 228
14.4.1 感知系統(tǒng) 228
14.4.2 更新規(guī)則 229
14.4.3 反應(yīng)時(shí)間 229
14.4.4 門限 229
14.4.5 負(fù)荷平衡 229
14.4.6 計(jì)算代價(jià)與預(yù)處理 229
14.5 OpenSteer 230
第15章 部署一個(gè)Irrlicht應(yīng)用程序 232
15.1 什么是部署 232
15.2 針對(duì)不同平臺(tái)打包發(fā)布應(yīng)用 232
15.2.1 在Windows平臺(tái)下部署Irrlicht應(yīng)用程序 232
15.2.2 在Linux平臺(tái)下部署Irrlicht應(yīng)用程序 233
15.2.3 在Mac OS X平臺(tái)下部署Irrlicht應(yīng)用程序 234
15.3 部署源代碼 236
15.3.1 為什么要部署源代碼 236
15.3.2 如何部署 236
第14章
?游戲人工智能?
游戲AI(ArtificialIntelligence,人工智能)是近來討論較多的主題。隨著游戲中畫質(zhì)與音效的穩(wěn)步提高和改善,游戲控制玩家(gamecontrolledplayers)不用“聰明的”方式進(jìn)行操作,這種情況變得越來越明顯。游戲AI是編程人員為了給用戶提供某種挑戰(zhàn)或某種真實(shí)體驗(yàn)而設(shè)計(jì)出來的。在游戲中,站在一處從不移動(dòng)的警衛(wèi)顯得非常不真實(shí)。如果你創(chuàng)建一個(gè)程序,使他不時(shí)朝四周張望或變換姿勢(shì),就會(huì)看起來更具活力,而且更加真實(shí)。通過創(chuàng)建一個(gè)在預(yù)設(shè)路徑上行走的警衛(wèi),偶然還能夠停下來與正在站崗的警衛(wèi)談話的情景,可以使玩家感覺到游戲的真實(shí)感有很大提高。
編寫游AI是一個(gè)十分復(fù)雜的工程,里面包含的知識(shí)可以編撰成一本書了,但是AI是我們不可回避的問題,所以本章將為大家講解AI的含義及相關(guān)概念,最后還會(huì)向大家推薦一些在Irrlicht中常使用的協(xié)助編寫AI的類庫(kù)。
學(xué)習(xí)目標(biāo)
?了解游戲AI的想關(guān)概念
14.1什么是智能
AI是一門相對(duì)年輕的學(xué)科,其早期的一些研究工作完成于19世紀(jì)50年代初期。受早期游戲機(jī)計(jì)算能力和存儲(chǔ)空間的限制,游戲采用真正AI技術(shù)的歷史很短。由于AI在游戲中是一個(gè)嶄新的概念,因此游戲AI的定義對(duì)于大多數(shù)人,甚至從事游戲開發(fā)的人來說都還很模糊。
在介紹游戲AI之前,我們應(yīng)該先了解一下智能的概念。“智能”這個(gè)術(shù)語(yǔ)相當(dāng)模糊,它是指“獲取和應(yīng)用知識(shí)的能力”,從字面上解釋,該定義可能意味著自動(dòng)調(diào)溫器也是智能的。因?yàn)樽詣?dòng)調(diào)溫器可以獲取房間太冷這個(gè)知識(shí),從而應(yīng)用它所學(xué)到的知識(shí)調(diào)節(jié)加熱器。事實(shí)上,智能的“真正”定義已經(jīng)是一個(gè)古老的爭(zhēng)論了,而設(shè)計(jì)一個(gè)好的游戲并不需要這個(gè)定義。基于我們自己的目的,一個(gè)智能的游戲智能體是能夠獲取關(guān)于這個(gè)世界的知識(shí),并對(duì)該知識(shí)做出反應(yīng)的智能體。做出反應(yīng)的質(zhì)量和效果就是游戲需要權(quán)衡和設(shè)計(jì)的問題。
14.2什么是游戲AI
在AI的經(jīng)典著作《ArtificalIntelligence:AModernApproach》(人工智能:一種現(xiàn)代方法)中,Russel和Norving指出,AI就是設(shè)計(jì)計(jì)算機(jī)程序可以像人一樣行動(dòng)和思考,同時(shí)是理性地行動(dòng)和思考。這個(gè)定義包含智能的認(rèn)知學(xué)和行為學(xué)的觀點(diǎn),并涵蓋理性和“人性”。
簡(jiǎn)單地說,游戲AI就是游戲中的代碼,使得在給定情形下,當(dāng)游戲有多種選擇時(shí),計(jì)算機(jī)控制的競(jìng)爭(zhēng)對(duì)手(或合作伙伴)采取看起來聰明的決策,從而產(chǎn)生相關(guān)、有用的行為。注意上述敘述中“看起來”這個(gè)詞。游戲中由AI產(chǎn)生的行為是“結(jié)果”導(dǎo)向的,因此可以認(rèn)為游戲界主要關(guān)注AI中的行為主義學(xué)派。的確,我們僅僅對(duì)系統(tǒng)將要做出的響應(yīng)感興趣,而不太關(guān)心系統(tǒng)是如何做出這個(gè)響應(yīng)的。我們關(guān)心系統(tǒng)如何行動(dòng),而不關(guān)心如何思考。人們?cè)谕嬗螒驎r(shí)并不會(huì)在意這個(gè)游戲是否運(yùn)用龐大的決策腳本數(shù)據(jù)庫(kù),也不會(huì)在意是否對(duì)決策樹進(jìn)行直接搜索,或者是否建立所處環(huán)境的精確知識(shí)庫(kù),是否基于邏輯規(guī)則進(jìn)行推理決策。正如這些AI所說,推理過程全由游戲AI實(shí)現(xiàn)。因此,純粹的行為決策,如對(duì)手發(fā)動(dòng)了哪項(xiàng)攻擊、他是如何接近玩家的、他如何在環(huán)境中使用各種要素以及其他游戲細(xì)節(jié),全部是由游戲AI系統(tǒng)完成的。
現(xiàn)代游戲發(fā)展過程中也使用AI這個(gè)術(shù)語(yǔ)描述其他游戲行為,比如人類輸入接口的工作方式。有時(shí)甚至支配運(yùn)動(dòng)和碰撞的算法(如果游戲運(yùn)動(dòng)通過動(dòng)畫驅(qū)動(dòng)而非物理模擬)也屬于這一類。可見,AI是游開發(fā)界中一個(gè)被廣泛使用的名詞。當(dāng)與其他同行討論AI時(shí),大家必須一致認(rèn)同這個(gè)術(shù)語(yǔ)的內(nèi)涵和范圍。這點(diǎn)非常重要,否則一個(gè)人關(guān)于AI的觀念與其他人的觀念相差太遠(yuǎn),就容易產(chǎn)生誤解。本章涉及AI時(shí),將使用非常狹窄的定義,即“基于角色的行為智能”。其中的術(shù)語(yǔ)“角色”源于大多數(shù)游戲的角色驅(qū)動(dòng)本質(zhì)。
以前,AI編程普遍被稱為“游戲玩法編程”,因?yàn)镃PU控制的角色所展現(xiàn)出來的行為的確不含任何智能成分。在視頻游戲早期,大多數(shù)程序員都為他們游戲中的人物使用一些模式或重復(fù)運(yùn)動(dòng)。在某種程度上,玩這些游戲時(shí)都要找到預(yù)先確定的行為模式,以便能夠輕易擊倒對(duì)手并繼續(xù)前往另一個(gè)地點(diǎn)。這是由早期處理器速度和存儲(chǔ)空間的極端限制所決定的。模式很容易存儲(chǔ),只需要最少的代碼來驅(qū)動(dòng),并且?guī)缀醪恍枰M(jìn)行計(jì)算;無論在頂層表現(xiàn)什么行為,它都簡(jiǎn)單地使人物按規(guī)則模式運(yùn)動(dòng)。事實(shí)上,一些游戲采用所謂隨機(jī)的運(yùn)動(dòng),但由于早期游戲中的隨機(jī)數(shù)產(chǎn)生器使用偽隨機(jī)數(shù)的硬編碼表,因此這些模式能夠在整個(gè)游戲行為中最終預(yù)見。
過去,為了讓游戲看起來更加智能,經(jīng)常使用另一種技術(shù),即讓計(jì)算機(jī)對(duì)手作弊,也就是讓其擁有人類玩家所不擁有的關(guān)于該游戲的額外信息,從而使下一步所做的決策看起來非常巧妙。計(jì)算機(jī)讀入玩家所按的按鈕后,以一個(gè)阻礙的走步作為系統(tǒng)的響應(yīng)。一個(gè)實(shí)時(shí)策略作弊器可以使使用者在游戲早期還沒有找到有價(jià)值資源的區(qū)域時(shí)便前往這些地點(diǎn)。當(dāng)游戲賦予計(jì)算機(jī)對(duì)手額外的能力、資源以及一些可直接使用的東西,而不是依靠自己提前規(guī)劃和了解對(duì)這些資源的需要,就可以實(shí)現(xiàn)AI的作弊。這些策略能夠帶來更具挑戰(zhàn)性,但是最終還是不能讓人滿意的對(duì)手。
14.3AI的組成與設(shè)計(jì)
幾乎所有AI引擎都將以某種形式使用決策與推理、感知、導(dǎo)航等基本系統(tǒng)。
14.3.1抉擇與推理
決策系統(tǒng)是AI引擎中使用最廣泛的部分,是決定用戶構(gòu)建的AI引擎類型的底層結(jié)構(gòu)。推理可定義為從實(shí)際知識(shí)或假定為真的前提中獲取邏輯或合理結(jié)論的行為。用游戲術(shù)語(yǔ)來說,意味著AI控制的對(duì)手獲取關(guān)于世界的信息并響應(yīng)智能、合理的決策。因此,AI系統(tǒng)受獲取的外界信息限制,也受游戲設(shè)計(jì)時(shí)定義的響應(yīng)集豐富程度的限制。游戲允許AI角色做的事情越來越多,游戲的響應(yīng)集或狀態(tài)空間就越來越大。用戶選擇的技術(shù)應(yīng)該由用戶要構(gòu)建的游戲規(guī)模和狀態(tài)空間的大小決定。
所有決策系統(tǒng)都可歸結(jié)于這個(gè)定義:利用可得到的輸入獲取解決方案。這些技術(shù)之間的差別將決定用戶選擇使用的類型。我們關(guān)注的主要區(qū)別有:解決方案的類型、智能體的反應(yīng)能力、系統(tǒng)的真實(shí)性、游戲類型、游戲內(nèi)容、游戲平臺(tái)等。
14.3.2解決方案的類型
游戲解決方案的主要類型有兩種:戰(zhàn)略型和戰(zhàn)術(shù)型。戰(zhàn)略型解決方案通常針對(duì)長(zhǎng)期、高層次并需要多個(gè)行動(dòng)共同完成的目標(biāo)。而戰(zhàn)術(shù)型解決方案更多針對(duì)短期、低層次并只包含一個(gè)物理動(dòng)作和技巧的目標(biāo)。兩者的區(qū)別在于游戲中關(guān)注整體行動(dòng)還是個(gè)體行動(dòng)。許多游戲同時(shí)需要戰(zhàn)略型和戰(zhàn)術(shù)型兩種解決方案,因此開發(fā)人員根據(jù)這種劃分將問題分離成幾個(gè)獨(dú)立的部分,并結(jié)合不同的結(jié)束實(shí)現(xiàn)。
14.3.3智能體的反應(yīng)能力
游戲元素應(yīng)該如何反應(yīng)?腳本化系統(tǒng)趨向于設(shè)計(jì)具有更多程式化和語(yǔ)境響應(yīng)的角色,但它們?nèi)菀资芾в谶@些行動(dòng)腳本,從而失去反應(yīng)。與此相反,完全反應(yīng)式系統(tǒng)容易被認(rèn)為過于機(jī)械或作弊,并且不符合人類的感情。強(qiáng)響應(yīng)系統(tǒng)需要一個(gè)非常豐富的響應(yīng)集,否則它們表現(xiàn)的行為將是可預(yù)測(cè)和無新意的。然而這對(duì)街機(jī)式游戲或所謂的twitch游戲非常合適,需要在所設(shè)計(jì)的游戲類型和對(duì)所期望設(shè)計(jì)的玩法經(jīng)驗(yàn)正確權(quán)衡的基礎(chǔ)上進(jìn)行闡述。
14.3.4系統(tǒng)的真實(shí)性
要被認(rèn)為是“真實(shí)的”,AI元素做出的決策和行動(dòng)必須類似于人類。在游戲的限制條件下,每個(gè)AI實(shí)體都需要智能決定所要做的正確的事情,但類似于人類也意味著會(huì)犯錯(cuò)誤。因此,AI角色也需要很好地體現(xiàn)人類的弱點(diǎn)。化解玩家所有拳擊或射擊永遠(yuǎn)不會(huì)落空的對(duì)手和Scrabble游戲中對(duì)整個(gè)字典了如指掌的對(duì)手都不會(huì)讓玩家高興,反而會(huì)讓他們感到沮喪,我們的目標(biāo)是在競(jìng)賽和娛樂之間找到平衡,從而使玩家被游戲的挑戰(zhàn)性所吸引,同時(shí)通過擊敗游戲形成一個(gè)持續(xù)的積極反饋。真實(shí)性問題還包括對(duì)游戲使用物理定律的實(shí)際認(rèn)同數(shù)量。玩家能跳得比實(shí)際生活中更高嗎?他能飛嗎?是否能很快痊愈?這些都得由開發(fā)人員決定,意味著“真實(shí)性”可定義為“特定游戲世界中的真實(shí)性”。在幻想世界中尤其要小心,因?yàn)樗烈馄茐囊?guī)則的敵人將被認(rèn)為是在作弊而不是具有魔法,必須采取措施以確保玩家了解并遵守游戲世界中的規(guī)則。還要記住,大多數(shù)玩家都知道地球物理定律,但在他們?cè)O(shè)法習(xí)慣開發(fā)人員設(shè)定的規(guī)則時(shí),這些特殊定律最初很有可能成為他們的絆腳石。
14.3.5游戲類型
不同類型的游戲需要不同類型的AI系統(tǒng)。在游戲?qū)用嫔希仨氂涀∫韵聨醉?xiàng):
(1)輸入(或感知)類型。要注意的事項(xiàng)包括輸入的數(shù)量、頻率、信息傳遞方式(輪詢、事件、回調(diào)函數(shù)等)以及輸入之間的層次關(guān)系。街機(jī)式游戲只有非常有限的輸入,而實(shí)時(shí)策略游戲中的角色可能需要非常多關(guān)于世界的感知,以便導(dǎo)航地形、保持編隊(duì)、幫助友好單元、接收人類發(fā)出的命令并對(duì)攻擊的敵人做出響應(yīng)。
(2)輸出(或決策)類型。根據(jù)感知,系統(tǒng)賦予引擎決策部分信息,AI系統(tǒng)將做出一個(gè)決策或產(chǎn)生一個(gè)輸出。輸出可以是模擬的、數(shù)字的或在周邊行為上的一連串事件,可以包含整個(gè)角色(如潛水以尋求掩護(hù))、部分角色(如扭頭以響應(yīng)噪聲)或多個(gè)角色(如讓市民們挖更多石頭)。輸出可以是具體的,也可以是高層的,其中后者將影響許多AI角色的行為,并改變?cè)S多決策的進(jìn)程。
(3)游戲類型需要的決策整體結(jié)構(gòu)。有的游戲具有非常簡(jiǎn)單或單一性的決策,Robotron游戲就是一個(gè)例子。怪物以一定的速度和運(yùn)動(dòng)類型向玩家靠近,并試圖殺死玩家。在復(fù)雜的游戲中(如《帝國(guó)時(shí)代》),需要在游戲中進(jìn)行許多不同類型的決策,可以使用小組級(jí)策略、單元戰(zhàn)術(shù)、一系列路徑搜索問題以及其他更深?yuàn)W的問題,如外交手段等。其中每一個(gè)問題都可能代表AI中的一個(gè)子系統(tǒng),而且這些子系統(tǒng)采用完全不同的方法完成這些工作。
14.3.6游戲內(nèi)容
上述游戲類型是游戲玩法關(guān)注的特例,由特殊或新奇的游戲內(nèi)容決定。《黑與白》之類的游戲需要為基本的游戲玩法機(jī)制設(shè)計(jì)非常專業(yè)的AI系統(tǒng),即通過引導(dǎo)或展示如何完成工作教它學(xué)會(huì)主要的動(dòng)物行為。預(yù)先設(shè)計(jì)框架時(shí)需要進(jìn)行深思熟慮,同時(shí)可以向早期的原型性工作尋求幫助以克服設(shè)計(jì)上的缺陷。
……