概述
状态机
FSM :具有有限数量的状态,任意时刻都处于有限状态集合中的某一状态。
当其有事件(event)或条件发生时,将从 当前状态(cur_state) 转换到 另一个状态(next_state) ,或者仍然保持在当前状态。
State:状态,状态内执行一个或多个动作(action)
Action:动作,执行具体事情,执行时机有Enter、Update、Exit方法。
它的优点:
1.编程快速简单 2.易于调试 3.很少的计算开销 4.直觉性 5.灵活性
缺点:
1.状态机总是在某一状态中,不能执行多个状态的事情,
解决:设置多层状态机同时运行解决这个问题
2.不易于拓展,新的逻辑需要新的状态。
解决:在状态运行多个小Action,复用Aciton,但Action会变得细碎
实现
行为树
行为树:是一棵具有层级结构的树,连接树枝的是各种类型的节点,节点决定了 AI 如何从根节点走到某一个叶子节点,树的末端就是实际要去做的事情。
- 遍历
行为树的一个特点就是它会一层一层的对节点依次进行检查,而每一层都要花费一个 Tick 的时间,所以一棵树要花费很多 Tick 的时间才能完成遍历,这和一般代码的实现有很大的区别。这是一个很没有效率的方式,尤其是当树变得很深的时候。我认为行为树的实现最好要在一次 Tick 里面完成整个行为树的逻辑判断,也就是说最好能在一次 Tick 时间里完成整棵树的遍历 - 节点
常用:
动作(action) 赋值
条件(condition)
选择
序列
条件执行
决定项返回 - 简单模板
根节点:
开始→总是运行→(条件idle)总是成功
→(条件battle)总是成功
→(条件flee)总是成功分支:
①总是成功→序列(为了扩展)→系列事情(末端决策)
→系列事情(末端决策) - 问题
Q:一般AI行为树是广度遍历?深度遍历?
A:广
Q:每帧
都要从根节点开始
遍历行为树,如何优化?
A:单独维护一个保存某些行为的列表(调度器),当正在执行的行为终止时,由其父节点决定接下来的行为。
Q:gc?
A:行为树本身---每次运行变量都要申请内存。
其他---字符串拼接。
技能
使用Animator基类 所有怪物都继承
用Animator的打标签作为通用,
特殊的写技能脚本 使用Type.GetConstructors获取实例化构造函数
最后
以上就是高大网络为你收集整理的【Unity】行为树与状态机,技能系统做法的全部内容,希望文章能够帮你解决【Unity】行为树与状态机,技能系统做法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复