最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
unity3d 行为树
在Unity3D开发中,我们公司内部比较推崇一款行为树插件,尽管市场上存在其他同类竞品。
说句题外话,优秀的插件大多由国外开发者开发,并且他们能够将插件开发作为小工作室或个人的主要收入来源,但目前尚未看到国内开发者有类似的优秀作品。
行为树的概念已经出现多年,其核心是通过各种经典的控制节点和行为节点的组合来实现复杂的AI。在游戏开发中,复杂的AI通常会运用行为树,而简单的AI则可以使用状态机实现。
Behavior Designer插件的节点类型
在Behavior Designer插件中,主要有四种类型的节点,它们都被称为Task:
- 组合节点(Composites):包含经典的Sequence、Selector、Parallel等节点。这些节点用于组织和管理子节点的执行逻辑。
- 装饰节点(Decorator):其作用是为唯一的子节点额外添加一些功能。例如,让子Task持续运行直到返回特定的运行状态值,或者将Task的返回值取反等。
- 行为节点(Actions):行为节点是真正执行具体操作的节点,属于叶节点。Behavior Designer插件自带了不少Action节点,但通常情况下,开发者需要编写自己的Action节点,除非是不懂脚本的美术人员或策划人员,仅希望简单地控制一些物件的属性。
- 条件节点(Conditinals):用于判断某个条件是否成立。Behavior Designer遵循职责单一原则,将判断逻辑独立为一个节点。例如,判断某目标是否在视野内,虽然可以在攻击的Action节点中编写该逻辑,但这样会使Action节点的职责不单一,不利于视野判断逻辑的复用。一般情况下,条件节点会出现在Sequence控制节点中,其后紧跟条件成立后需要执行的Action节点。
Behavior Designer的变量共享机制
Behavior Designer对变量共享做了如下处理:
- 在同一个Behavior Tree(通常一个GameObject对应一个Behavior Tree)的Task之间共享的局部变量,可以直接在编辑器的Variables中添加。
- 支持在不同Behavior Tree之间共享的全局变量。
- 支持Task与非Task(游戏系统中的其他脚本)之间进行变量传递,可通过以下代码实现:
behaviorTree.GetVariableName("MyVariableName"); behaviorTree.SetVariableName("MyVariableName", value);
此外,我查看了Behavior Tree官网的视频,讲解得比较清晰。不过,Sample代码需要一个码才能下载,由于目前使用的是非正式渠道的插件,没有该码,所以无法下载。