public static BTData.BehaviorTreeData CreateBehaviorTreeData(BehaviorTreeDesigner behaviorTree) { BTData.BehaviorTreeData data = new BTData.BehaviorTreeData(); data.ID = behaviorTree.ID; //行为树变量 for (int i = 0; i < behaviorTree.BehaviorTreeVariableFields.Count; i++) { VariableFieldDesigner field = behaviorTree.BehaviorTreeVariableFields[i]; if (field == null) { continue; } data.BehaviorTreeVariables.Add(CreateVariableField(field)); } for (int i = 0; i < behaviorTree.Fields.Count; i++) { FieldDesigner field = behaviorTree.Fields[i]; if (field == null) { continue; } data.Fields.Add(CreateField(field)); } NodeDesigner startNode = behaviorTree.GetStartNode(); if (startNode != null) { data.StartNode = CreateNode(behaviorTree, startNode); } return(data); }
public static BTData.BehaviorTreeData CreateTreeData(BehaviorTreeDataDesigner treeData) { BTData.BehaviorTreeData data = new BTData.BehaviorTreeData(); //全局变量 for (int i = 0; i < treeData.GlobalVariable.VariableFields.Count; i++) { VariableFieldDesigner variableField = treeData.GlobalVariable.VariableFields[i]; BTData.BaseField variableFieldData = CreateVariableField(variableField); data.GlobalVariable.VariableFields.Add(variableFieldData); } //Context变量 for (int i = 0; i < treeData.ContextVariable.VariableFields.Count; i++) { VariableFieldDesigner variableField = treeData.ContextVariable.VariableFields[i]; BTData.BaseField variableFieldData = CreateVariableField(variableField); data.ContextVariable.VariableFields.Add(variableFieldData); } for (int i = 0; i < treeData.BehaviorTrees.Count; i++) { BehaviorTreeDesigner behaviorTree = treeData.BehaviorTrees[i]; if (behaviorTree == null) { continue; } data.BehaviorTrees.Add(CreateBehaviorTreeData(behaviorTree)); } return(data); }
//保存 public void Save() { if (WorkSpaceData == null) { ShowMessage("当前没有工作空间,请新建或者打开工作空间!"); return; } if (NodeTemplate == null || BehaviorTreeData == null) { return; } //移除未定义的枚举字段 NodeTemplate.RemoveUnDefineEnumField(); //移除未定义的节点 BehaviorTreeData.RemoveUnDefineNode(); //修正数据,和模板的保持一致 BehaviorTreeData.AjustData(); //检验枚举 VerifyInfo verifyEnum = NodeTemplate.VerifyEnum(); if (verifyEnum.HasError) { ShowMessage(verifyEnum.Msg); ShowInfo(verifyEnum.Msg); return; } //检验节点类 VerifyInfo verifyNodeTemplate = NodeTemplate.VerifyNodeTemplate(); if (verifyNodeTemplate.HasError) { ShowMessage(verifyNodeTemplate.Msg); ShowInfo(verifyNodeTemplate.Msg); return; } //校验行为树 VerifyInfo verifyBehaviorTree = BehaviorTreeData.VerifyBehaviorTree(); if (verifyBehaviorTree.HasError) { ShowMessage(verifyBehaviorTree.Msg); ShowInfo(verifyBehaviorTree.Msg); return; } if (XmlUtility.Save(GetNodeTemplatePath(), NodeTemplate)) { NodeTemplateStringContent = XmlUtility.ObjectToString(NodeTemplate); } if (XmlUtility.Save(GetBehaviorTreeDataPath(), BehaviorTreeData)) { BehaviorTreeDataStringContent = XmlUtility.ObjectToString(BehaviorTreeData); } //序列化成二进制 BTData.BehaviorTreeData treeData = EditorUtility.CreateTreeData(BehaviorTreeData); if (treeData != null) { string savePath = GetNodeDataSavePath(); if (File.Exists(savePath)) { File.Delete(savePath); } BTData.Serializer.SerializeToFile(treeData, savePath); } ShowInfo("保存成功 时间:" + DateTime.Now); }