1. 克隆源码
https://github.com/Tencent/behaviac/
2. 编译生成BehaviacDesigner.exe
3. 找到并打开BehaviacDesigner.exe(先不急着填弹出的路径workspace 设置框)
4. 新建一个Unity 空工程,并在此处下载behaviac unitypackage
5. Unity中导入该Unitypackage
6. 在Unity 工程Assets中创建Resources/behaviac/exported 文件夹
7. 回到第三步,设置工作路径如下
8. 创建一个行为树命名为Agent,创建一个agent的派生类叫Player(之后会生成一个Player.cs脚本里面包含的待实现的行为接口), 仿照下面完善该行为树,在对应节点上右键,添加断点。最后导出
注意,这个行为树中的两个wait()对调试很关键,其中数字是单位是毫秒,可以让整个树在这里等待一定时间,而这个时间内正好可以用来手动连接服务器进行调试。如果没有这个wait,那么一旦在unity中点击运行,行为树逻辑已经跑完,而BehaviaDesigner都没来得及连接到Unity.
9.查看Unity工程中的文件树
10. Unity创建一个空物体,命名为behaviac, 挂载Player.cs脚本
11. 用下面的Player.cs替换你的Player.cs
- // -------------------------------------------------------------------------------
- // THIS FILE IS ORIGINALLY GENERATED BY THE DESIGNER.
- // YOU ARE ONLY ALLOWED TO MODIFY CODE BETWEEN '///<<< BEGIN' AND '///<<< END'.
- // PLEASE MODIFY AND REGENERETE IT IN THE DESIGNER FOR CLASS/MEMBERS/METHODS, ETC.
- // -------------------------------------------------------------------------------
-
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
-
- ///<<< BEGIN WRITING YOUR CODE FILE_INIT
- ///<<< END WRITING YOUR CODE
- public class Player : behaviac.Agent
- ///<<< BEGIN WRITING YOUR CODE Player
- ///<<< END WRITING YOUR CODE
- {
- #region 格式化的内容,直接拷贝
- behaviac.EBTStatus _status = behaviac.EBTStatus.BT_RUNNING;
- private static string ExportedFilePath
- {
- get
- {
- string relativePath = "/Resources/behaviac/exported";
- if (Application.platform == RuntimePlatform.WindowsEditor)
- {
- return Application.dataPath + relativePath;
- }
- else if (Application.platform == RuntimePlatform.WindowsPlayer)
- {
- return Application.dataPath + relativePath;
- }
- else
- {
- return "Assets" + relativePath;
- }
- }
- }
- private bool InitPlayer()
- {
- behaviac.Debug.LogWarning("InitPlayer");
- bool bRet = this.btload("Agent");
- if (bRet)
- {
- this.btsetcurrent("Agent");
- }
- return bRet;
- }
- private bool InitBehavic()
- {
- behaviac.Debug.LogWarning("InitBehavic");
- behaviac.Workspace.Instance.FilePath = ExportedFilePath;
- behaviac.Workspace.Instance.FileFormat = behaviac.Workspace.EFileFormat.EFF_xml;
- return true;
- }
- void Awake()
- {
- InitBehavic();
- InitPlayer();
- }
-
- void Update()
- {
- if (_status == behaviac.EBTStatus.BT_RUNNING)
- {
- behaviac.Debug.LogWarning("Update");
- behaviac.Workspace.Instance.Update();//要想能调试,这句必须有
- _status = this.btexec();
-
- }
- }
- #endregion
- public void drift()
- {
- ///<<< BEGIN WRITING YOUR CODE drift
- UnityEngine.Debug.Log("drift");
- ///<<< END WRITING YOUR CODE
- }
- public bool IsInCollision()
- {
- ///<<< BEGIN WRITING YOUR CODE IsInCollision
- return false;
- ///<<< END WRITING YOUR CODE
- }
- public void moveForward()
- {
- ///<<< BEGIN WRITING YOUR CODE moveForward
- UnityEngine.Debug.Log("moveForward");
- ///<<< END WRITING YOUR CODE
- }
- ///<<< BEGIN WRITING YOUR CODE CLASS_PART
- ///<<< END WRITING YOUR CODE
- }
- ///<<< BEGIN WRITING YOUR CODE FILE_UNINIT
- ///<<< END WRITING YOUR CODE
12. 点击Unity 运行,紧接着按照下图步骤在BehaviacDesigner端连接Unity(所有操作默认即可)
13. 最多等待20s, 可以看到BehaviacDesigner端断点被击中(断点从紫色变成黄色)
这里让这个断点重复50次,如果想让断点继续执行下一步,就点击左上角蓝色小三角
tips: