DllEventIssueFix
Parachute
Behavior Tree(行为树)的C#实现
在做一个战场上士兵自动战斗的功能的时候,查看了很多关于Behavior Tree的相关内容。在Unity中也有很多现成的可视化插件工具,可以很方便的定义和实现Behavior Tree。但是因为种种不符合需求的问题,最终还是选择自己来实现Behavior Tree的机制。
定义士兵的AI,使用的是XML配置文件,XML的结构与实际生成的Behavior Tree结构非常一致。
Behavior Tree的结点类型包括Composite Node、Decorator Node、Condition Node、Action Node。其中Action Node是AI主体所能执行的具体行为,而通往各个叶子结点(Action Node)的路径就是Behavior Tree根据环境所做的决策过程。
先来看一段士兵的Behavior Tree的配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
这段配置定义了士兵的行为,包括死亡、Idle、攻击、移动的相关决策行为和决策条件。通过结点的名称也很容易就能够推断出所要实现的功能。
Behavior的实现
Delegates Events and Actions in C#
- delegate example
使用delegate的目的是在方法中传递方法指针。通过声明delegate的方法签名,可以在运行时在符合delegate方法签名的方法中选择要执行的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
|
- Event example
Event是一种特殊类型的delegate,使用Event可以很方便的实现观察者模式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
- Action example
Action是一种语法糖,它是一种不需要提前声明的delegate,使得delegate的使用更加方便,局限性就是不能定义返回值。(Func<> Delegates是一种可以定义返回值的语法糖)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
参考资料:
1. C# Delegates, Actions, Funcs, Lambdas–Keeping it super simple
2. event(C# 参考)