Unity Behavior Tree Editor 行为树编辑器初级实现
编辑效果如下
编辑器脚本最好和行为树脚本分离。
需要存储的信息有:节点类型、子节点数组、(条件节点、行为节点需要特殊编辑)
数据存储在 NodeAsset
中,只需要包存一个根节点即可(从跟节点可以找到所有节点)
[System.Serializable]
public class NodeAsset : ScriptableObject
{
[SerializeField]
public NodeValue nodeValue = null;
}
// 节点数据
[Serializable]
public class NodeValue
{
// 根节点
public bool isRootNode = false;
// 节点类型
public NodeType NodeType = NodeType.Select;
// 子节点集合
public List<NodeValue> childNodeList = new List<NodeValue>();
// 叶节点脚本名
public string componentName = string.Empty;
// 条件节点、行为节点描述(辅助查看)
public string description = string.Empty;
// 节点位置(编辑器显示使用)
public Rect position = new Rect(0, 0, 100, 100);
/// <summary>
/// 是否为有效节点, isRelease = true 为已经销毁的节点,为无效节点
/// </summary>
public bool isRelease = false;
/// <summary>
/// 删除节点时调用
/// </summary>
public void Release()
{
isRelease = true;
}
}
NodeAsset 继承 ScriptableObject 的好处是可以将 NodeAsset 存储为 *.asset 类型文件
理论上 组合节点:顺序节点、选择节点、随机节点、并行节点、修饰节点 等是不需要配置任何数据的,因为遍历逻辑全部是已经写好的。所以实际中只需要读取 NodeAsset 配置文件,从根节点开始遍历所有节点,将每个节点根据类型实例化为 行为树节点,将父子节点按照配置文件添加,最终只需要得到一个行为树的根节点,执行根节点就行了。
private NodeRoot GetNodeRoot(NodeValue nodeValue)
{
NodeRoot nodeRoot = null;
switch (nodeValue.NodeType)
{
case NodeType.Select: // 选择节点
nodeRoot = new NodeSelect();
break;
case NodeType.Sequence: // 顺序节点
nodeRoot = new NodeSequence();
break;
case NodeType.Decorator: // 修饰节点
nodeRoot = new NodeDecorator();
break;
case NodeType.Random: // 随机节点
nodeRoot = new NodeRandom();
break;
case NodeType.Parallel: // 并行节点
nodeRoot = new NodeParallel();
break;
case NodeType.Condition: // 条件节点、需要特殊处理
nodeRoot = GetLeafNode(nodeValue);
break;
case NodeType.Action: // 行为节点、需要特殊处理
nodeRoot = GetLeafNode(nodeValue);
break;
}
return nodeRoot;
}
条件节点和行为节点 一般需要配置一些参数,比如 血量 小于 100, 饥饿值 > 50, 等
如何灵活配置,目前还没想好怎么处理,目前还是一个半成品
操作如下 Window 下添加菜单 CreateTree
在空白区域鼠标右键 Add Node
添加子节点:选择一个节点 Make Transition (条件节点、行为节点为叶子节点,不能添加子节点)
一个行为树只能有一个根节点,任何节点都可以随时改变节点类型
通过枚举选择节点类型
有比较好的实现方案或者建议请留言,对Unity编辑器脚本使用的不够熟练,在功能实现上有了很大的限制。
来源:CSDN
作者:liqiangeastsun
链接:https://blog.csdn.net/LIQIANGEASTSUN/article/details/79262656