我是靠谱客的博主 高大网络,最近开发中收集的这篇文章主要介绍【Unity】行为树与状态机,技能系统做法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

状态机

FSM :具有有限数量的状态,任意时刻都处于有限状态集合中的某一状态。
当其有事件(event)或条件发生时,将从 当前状态(cur_state)  转换到 另一个状态(next_state) ,或者仍然保持在当前状态。

State:状态,状态内执行一个或多个动作(action)

Action:动作,执行具体事情,执行时机有Enter、Update、Exit方法。

它的优点:
1.编程快速简单  2.易于调试  3.很少的计算开销  4.直觉性  5.灵活性

缺点:
1.状态机总是在某一状态中,不能执行多个状态的事情,
      解决:设置多层状态机同时运行解决这个问题
2.不易于拓展,新的逻辑需要新的状态。
      解决:在状态运行多个小Action,复用Aciton,但Action会变得细碎

实现

行为树

行为树:是一棵具有层级结构的树,连接树枝的是各种类型的节点,节点决定了 AI 如何从根节点走到某一个叶子节点,树的末端就是实际要去做的事情。

  1. 遍历
    行为树的一个特点就是它会一层一层的对节点依次进行检查,而每一层都要花费一个 Tick 的时间,所以一棵树要花费很多 Tick 的时间才能完成遍历,这和一般代码的实现有很大的区别。这是一个很没有效率的方式,尤其是当树变得很深的时候。我认为行为树的实现最好要在一次 Tick 里面完成整个行为树的逻辑判断,也就是说最好能在一次 Tick 时间里完成整棵树的遍历
  2.   节点

     

     常用:
    动作(action) 赋值 

    条件(condition)
    选择
    序列 
    条件执行 
    决定项返回

  3. 简单模板

    根节点:                         
    开始→总是运行→(条件idle)总是成功
                             →(条件battle)总是成功
                             →(条件flee)总是成功        

    分支:
    ①总是成功→序列(为了扩展)→系列事情(末端决策)
                                                  →系列事情(末端决策)

  4. 问题
    Q:一般AI行为树是广度遍历?深度遍历?
    A:广
    Q:每帧

    都要从根节点开始

    遍历行为树,如何优化?
    A:单独维护一个保存某些行为的列表(调度器),当正在执行的行为终止时,由其父节点决定接下来的行为。
    Q:gc?
    A:行为树本身---每次运行变量都要申请内存。
          其他---字符串拼接。
     

技能

使用Animator基类 所有怪物都继承
用Animator的打标签作为通用,
特殊的写技能脚本 使用Type.GetConstructors获取实例化构造函数



 

最后

以上就是高大网络为你收集整理的【Unity】行为树与状态机,技能系统做法的全部内容,希望文章能够帮你解决【Unity】行为树与状态机,技能系统做法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部