AI接口梳理
关于GOAP目标导向型AI以前没有自己写过 所以本篇更新的会比较慢,现在正慢慢理清思路往下写,本篇是个人代码阅读笔记 更新中…
2016.12.6 更新StateDictionary/State 部分分析
阅读经验 💡
阅读每个文件夹的时候,问自己几个问题
- 与AIAction的关系 ?
- 与AIGoals的关系 ?
- 与AIMemory的关系 ?
- 与AISensors的关系 ?
- 与AISystem的关系 ?
笔记部分
Goal-Oriented Action Planning (GOAP)
面向目标的行动规划
AIBrain
AIBrain.cs AI的大脑,大脑会知道当前AI的一切状态;
AIBrain <- AIStateSystem Interface
当前 AI Agent 所处的状态。动画的开始结束,更新函数被 AIBrain 高层面统一调用。
AIBrain <- AISensor Interface
约定AI Sensor模版是可以被序列化的支持在UNITY3D中使用ScriptableTool操作。为了方便模版的批量定制
StateDictionary
封装一个 key-value ,里面无意义代码也比较多。根本上就是处理key-value的对比,合并重写,初始化的快捷操作
1 | public Dictionary<string, object> conditions; |
State
统一调用所有的 AIStateSystem ,先是State基类 作为统一调用的入口而存在,图二通过方法侵入,设置当前状态。还是忍不住截了张图,这设计太经典了。打出一套combo连招~
忍不住要说说这种设计的好处,隐藏了具体实现细节,而且只需要重写相应的代码即可修改代码执行之前的判断。
Checkers
优化基础代码
AIAction Interface
- 具体行为的执行者
- 计算当前节点消耗 [CalculateCost]
- AIAction可以得到一切计算所需要的数据,有最具体的数据处理逻辑
- preConditions AI能被执行的前提条件,只有这个条件列表都被满足才能执行这个AI行为
- postEffects 当前行为结束[IsCompleted(AIBrain)]之后 将要抛出这个变更过的条件列表,给AIBrain
- 提供函数给Planner校验是否当前行为可以被添加到计划中[CanBeAddedToPlan]
- [JustBeforePlan] 一个钩子函数,如果有什么需要预处理的可以提前处理。
- [GetRelated] 也是比较重要的一个函数,获取关联的函数
Planner
- 计划所有目标的可行性
- 给当前脑中的所有goal排序
本文标题:AI接口梳理
文章作者:Keyle
发布时间:2016-12-06
最后更新:2024-09-11
原始链接:https://vrast.cn/posts/6aa8a811/
版权声明:©Keyle's Blog. 本站采用署名-非商业性使用-相同方式共享 4.0 国际进行许可