今天很是開心,觀看cocos官方直播竟然在幾千人中中獎,能夠買彩票了。
言歸正傳,所謂的人工智能,也就是你們常說的AI(Artificial Intelligence)。一說到AI可能就會讓人以爲比較深奧,其實也就是非玩家角色思考和行爲的綜合。好比,在什麼樣的條件下,觸發什麼樣的行爲。
其實咱們在遊戲開發中的AI要比學術理論中的AI簡單不少,甚至有些行爲不須要AI也能體現。好比使用劇情對話體現非玩家角色的想法。
那麼AI 都涉及到哪些東西呢?dom
首先仍是要定義好行爲枚舉,經過狀態機,不一樣的行爲實現不一樣的邏輯。
函數
定義感知器特徵
不一樣的遊戲感知的特徵確定是不同的,根據遊戲需求而定
工具
實現感知類
學習
定義決策樹this
export default class DecisionTree { private decisionData: XlsxData; private perception: Perception; constructor(data: XlsxData) { this.decisionData = data; } setPerception(perception: Perception) { this.perception = perception; } getPerception(obj, perceptionType: PerceptionType, value: number) { return this.perception.action(obj, perceptionType, value) } //開始思考 action(obj: RoleView, decisionID: number) { let data = this.decisionData.getRowData(decisionID) let flag = false; if (data) { let perceptionType = data[Ai_dataEnum.condition]; let type = 0; let id: number[] = null; flag = this.perception.action(obj, perceptionType, data[Ai_dataEnum.cParam]) if (flag) { type = data[Ai_dataEnum.conditionYes] id = data[Ai_dataEnum.parm1] } else { type = data[Ai_dataEnum.conditionNo] id = data[Ai_dataEnum.parm2] } this.judge(obj, type, id) }else{ } return flag; } //斷定感知條件 private judge(obj: RoleView, type: ThinkType, param: number[]) { if (type == ThinkType.ACTION) { this.doLogic(obj, param) } else { for (let index = 0; index < param.length; index++) { const element = param[index]; if (this.action(obj, element)) { break;//目前僅支持串行,不支持並行。如需支持並行,須要添加是否攔截字段。 } } } } // 50 30 20 : 80 根據機率選擇行爲 private doLogic(obj: RoleView, param: number[]) { if (param.length > 0) { let r = RandomHelper.random(0, 100); let count = param.length / 2 for (let index = 0; index < count; index++) { let behaveType: number = param[index * 2] let random: number = param[index * 2 + 1] // if (r <= random) { // 設置非玩家角色的行爲。 obj.setBehaveType(behaveType) return; } } } } }
export default class EnemyController extends GameController { private perception: Perception = new Perception(); private ai: DecisionTree; constructor() { super() let ai_data: XlsxData = GameDataManager.instance().get(DataName.ai_data) this.ai = new DecisionTree(ai_data) this.ai.setPerception(this.perception) } getPerception(obj, perceptionType: PerceptionType, value: number) { return this.perception.action(obj, perceptionType, value) } action(obj: RoleView, decisionID: number) { this.ai.action(obj, decisionID) } }
在非玩家角色中聲明控制器和行爲管理器
人工智能
定義思考函數3d
think() { this.ai.action(this, this.model.getAI()) }
以上就是我我的對遊戲開發中AI的理解,固然我是拜讀了《遊戲人工智能——計算機遊戲中的人工智能》這本書的。好像此書已經絕版了。但願放出來對熱衷於遊戲開發的小夥伴們有所幫助。code
歡迎掃碼關注公衆號《微笑遊戲》,瀏覽更多內容。blog