Lua 遊戲 AI 開發指南 (Learning Game AI Programming with Lua)
內容描述
游戲人工智能(游戲AI)是游戲開發的一個重要方面,在很大程度上決定了游戲產品的逼真程度和對玩家的吸引力,由此也得到游戲開發工程師越來越多的重視。
本書秉承把動畫和運動系統直接集成到AI系統的方法,詳細介紹瞭如何使用Lua語言及相關的技術和工具,編寫和實現高質量的游戲AI。全書共9章,分別介紹了沙箱基礎、創建和移動智能體、角色動畫、意識控制、導航、決策制定、知識表達、感知和策略等主題。
本書適合於游戲開發工程師,特別是想要詳細瞭解游戲AI開發的程序員閱讀參考。
目錄大綱
第1章從構建沙箱開始
1.1AI沙箱簡介
1.1.1理解沙箱
1.1.2項目文件組織
1.1.3預先做好的構建
1.1.4使用VisualStudio2008/2010/2012/2013編譯沙箱項目
115開源庫
1.1.6開源工具
1.1.7LuaIDE—Decoda
1.1.8在Decoda中運行AI沙箱
1.1.9創建一個新的Decoda項目
1.1.10調試Lua腳本
1.1.11Decoda的Watch窗口
1.1.12Decoda的CallStack窗口
1.1. 13Decoda的VirtualMachines窗口
1.1.14同時調試Lua與C++代碼
1.1.15VisualStudio—附加到進程
1.1.16Decoda—附加到進程
1.1.17Decoda—附加到系統調試器
1.1.18關聯Lua腳本代碼到Decoda
1.1.19Lua虛擬機
1.1.20Lua堆棧
1.1.21Lua基礎類型
1.1.22元表
1.1.23元方法
1.1.24自定義類型
1.1.25C/C++調用Lua函數
1.1.26Lua調用c/c++函數
1.1.27創建自定義數據類型
1.1 .28Demo框架
1.2小結
第2章創建並移動智能體
2.1新建一個沙箱項目
2.2創建文件結構
2.3擴展SandlooxApplication類
2.4首次運行沙箱
2.5新建一個Decoda項目
2.6配置Decoda運行的可執行程序
2.7 建一個沙箱Lua腳本
2.7.1創建地板
2.7.2添加光源
2,7.3添加天空盒
2.7.4在沙箱中添加網格
2.7.5創建沙箱對象
2.8發射方塊
2.9創建智能體Lua腳本
2.9. 1創建視覺表象
2.9.2更新智能體的位置
2.9.3更新智能體的朝向
2.10智能體的屬性
2.10.1朝向
2.10.2定位
2.10.3大小
2.10.4物理
2.10.5知識
2.10.6智能體的移動
2.10.7智能體轉向力
2.10.8規避
2.10.9規避障礙物和其他智能體
2.10.10群組移動
2.10.11創建一群追隨者
2.10.12轉向力合計
2.11小結
第3章角色動畫
3.1骨骼和網格
3.1.1網格骨骼
3.1.2加載一個動畫網格
3.1.3顯示骨骼
3.2附加網格到骨骼上
3.3動畫片段
3.3.1播放戰士動畫
3.3.2戰士動畫
3.4戰士的姿勢
3.5操作動畫
3.5.1啟用和禁用動畫
3.5.2循環動畫
3.5.3動畫的長度
3.5.4動畫時間
3.5.5歸一化時間
3.5.6重新開始動畫
3.5.7播放非循環動畫
3.5.8動畫速率
3.6動畫混合
3.6.1動畫權重
3.6.2混合窗口
3.6.3混合曲線
3.6.4線性混合
3.6.5處理混合 重
3.7動畫狀態機(ASM)
3.7.1狀態
3.7.2轉換
3.7.3創建動畫狀態機
3.7.4創建輔助函數
3.7.5添加狀態
3.7.6添加轉換
3.7.7添加外部輔助函數
3.7.8強制設置狀態
3.7.9請求狀態
3.7.10更新動畫狀態機
3.7.11處理狀態轉換和狀態請求
3.7.12更新運行中的動畫
3.7.13動畫狀態機實例
3.8構造一個武器動畫狀態機
3.9構建戰士的動畫狀態機
3.10更新動畫狀態機
3.11處理狀態
3.12小結
第4章意識體控制
4.1創建身體
4.1.1創建戰士
4.1.2附加動畫網格到智能體
4.1.3創建障礙訓練場
4.2為動畫狀態機添加回調
4.2.1處理回調
4.2.2為ASM添加回調
4.2.3更新ASM以調用回調函數
4.3讓戰士射擊
4.3.1骨骼位置
4.3.2骨骼旋轉
4.3.3創建粒子效果
4.3.4粒子方向
4.3.5對象刪除
4.3.6碰撞效果回調
4.3.7發射子彈
4.3.8處理子彈碰撞效果
4.3.9射擊
4.4讓戰士奔跑
4.4.1設置穿越障礙訓練場的路線
4.4.2跑過障礙訓練場
4.5創建大腦
4.6直接動畫控制
4.6.1死亡狀態
4.6.2空閒狀態
4.6.3下落狀態
4.6.4移動狀態
4.6.5射擊狀態
4.7一個簡單的有限狀態機
4.7.1初始化智能體
4.7.2智能體FSM狀態處理
4.8間接動畫控制
4.8.1動畫控制器
4.8.2命令
4.8.3命令隊列
4.8.4操作命令
4.8.5姿勢改變命令
4.8.6死亡命令
4.8.7下落命令
4.8.8空閒命令
4.8.9移動命令
4.8.10射擊命令
4.8.11賦值成員函數
4.8.12初始化控制器
4.8.13添加命令處理函數
4.8.14更新控制器
4.9運行障礙訓練場
4.9.1創建直接控制智能體
4.9.2創建間接控制智能體
4.9.3間接控制智能體初始化
4.9.4間接控制智能體更新
4.9.5間接控制智能體的控制
4.9.6產生一個間接控制的智能體
4.10動作延遲
4.11小結
第5章導航
5.1尋路
5.2創建導航網格
5.2.1配置導航網格
5.2.2可通行高度
5.2.3可通行半徑
5.2.4可通行的攀爬高度
5.2.5可通行的斜坡角度
5.2.6最小區域面積
5.2.7構建導航網格
5.2.8繪製導航網格
5.3在導航網格中尋路
5.3.1路徑查詢
5.3.2查詢結果
5 .3.3隨機導航路點
5.4路徑信息
5.5為戰士添加隨機尋路
5.5.1更新智能體的路徑
5.5.2繪製路徑
5.5.3初始化導航網格
5.5.4隨意移動的智能體
5.6創建更多的導航網格
5.7小結
第6章決策制定
6.1創建自定義類型
6.2智能體動作
6.2.1添加數據成員
6.2.2動作初始化
6.2.3動作更新
6.2.4動作清理
6.2.5動作的成員函數
6.3創建動作
6.3 .1空閒動作
6.3.2死亡動作
6.3.3換彈藥動作
6.3.4射擊動作
6.3.5隨機移動動作
6.3.6移動動作
6.3.7逃跑動作
6.3.8追逐動作
6.4求值器
6.5創建求值器
6.5.1常數求值器
6.5.2是否擁有彈藥求值器
6.5.3是否有生命危險求值器
6.5.4是否有敵人求值器
6.5.5是否移動求值器
6.5.6是否存活求值器
6.5.7能否射擊敵人求值器
6.5.850比50機會求值器
6.6決策結構
6.7決策樹
6.7.1分支
6.7.2決策葉節點
6.7.3分支求值
6.8構造一棵決策樹
6.9創建一個決策樹智能體
6.9.1決策樹的優點
6.9.2決策樹的缺點
6.10有限狀態機
6.10.1狀態
- 10.2轉換
6.10.3有限狀態機結構
6.10.4輔助函數
6.10.5添加狀態和轉換
6.10.6更新有限狀態機
6.10.7添加實例函數
6.11構造有限狀態機
6.11.1空閒狀態
6.11.2移動狀態
6.11 .3隨機移動狀態
6.11.4射擊狀態
6.11.5逃跑狀態
6.11.6死亡狀態
6.11.7追逐狀態
6.11.8換子彈狀態
6.12創建一個有限狀態機智能體
6.13有限狀態機的優點
6.14有限狀態機的缺點
6.15行為樹
6.15.1行為樹節點
6.15.2輔助函數
6.15.3更新行為樹節點
6.16動作
6.17條件
6.18選擇器
6.19序列
6.20創建行為樹對象
6.20.1行為樹輔助函數
6.20.2選擇器計算
6.20 .3序列計算
6.20.4節點計算
6.20.5繼續行為樹計算
6.20.6行為樹的更新循環
6.20.7更新行為樹
6.21構造一顆行為樹
6.21.1死亡行為
6.21.2逃跑行為
6.21.3戰鬥行為
6.21.4換子彈行為
6.21.5射擊行為
6.21.6追逐行為
6.21.7移動行為
6.21.8隨機移動行為
6.21.9空閒行為
6.22創建行為樹智能體
6.23行為樹的優點
6.24行為樹的缺點
6.25小結
第7 知識表達
7.1知識源
7.1.1創建知識源
7.1.2知識源求值
7.2黑板
7.2.1創建黑板
7.2.2添加和刪除知識源
7.2.3知識源求值
7.2.4設置和返回黑板屬性
7.2. 5黑板的成員函數
7.3創建戰士的知識源
7.3.1選擇敵人
7.3.2選擇逃離位置
7.4構造戰士的黑板
7.5更新決策求值器
7.6更新行為動作
7.6.1死亡動作
7.6.2逃離動作
7.6.3空閒動作
7.6.4移動動作
7.6.5追逐動作
7.6.6換子彈動作
7.6.7射擊動作
7.7小結
第8章感知
8.1事件
8.1.1屬性
8.1.2發送事件
8.1.3接收事件
8.2管理事件
8.2. 1分配智能體團隊
8.2.2處理智能體通信
8.2.3事件類型
8.3創建智能體的感官
8.3.1初始化感官
8.3.2更新感官
8.4智能體視覺
8.5智能體視覺事件
8.5.1看到新敵人的事件
8.5.2看到新的敵人死屍事件
8.5.3看到新的死亡隊友事件
8.6處理新看到的智能體
8.6.1間歇性可見的智能體
8.6.2限制智能體可視性的更新
8.6 .3創建事件處理
8.6.4添加事件處理函數
8.7智能體的聽覺
8.8 覺事件
8.8.1子彈發射事件
8.8.2子彈碰撞事件
8.9處理聽覺事件
8.10清理黑板中的事件
8.11清理聽覺事件
8.12團隊交流
8.12.1選擇敵人事件
8.12.2位置更新事件
8.12.3撤退位置事件
8.13更新智能體行為
8.13.1選擇敵人
8.13.2評估危險位置
8.13.3計算最佳逃離位置
8.14小結
第9章策略
9.1影響力地圖
9.1.1單元格高度
9.1.2單元格寬度
9.2構造影響力地圖
9.2.1配置
9.2.2導航網格的立體像素化
9.3繪製影響力地圖
9.4訪問影響力
9.4.1設置影響力
9.4.2獲取影響力
9.5清除影響力
9.6傳播影響力
9.6.1單元格慣性
9.6 .2單元格衰減
9.7影響力地圖的圖層
9.8更新影響力地圖
9.9戰士的策略
9.10團隊影響力評分
9.10.1初始化團隊影響力
9.10.2更新團隊影響力
9.10.3配置團隊影響力
9.11危險區域評分
9.11.1利用智能體事件
9.11.2添加事件處理器
9.11.3初始化危險影響力
9.11.4更新危險影響力
9.11.5配置團隊影響力
9.12小結