• 腾讯Behaviac Designer 和Unity连调行为树


    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

    1. // -------------------------------------------------------------------------------
    2. // THIS FILE IS ORIGINALLY GENERATED BY THE DESIGNER.
    3. // YOU ARE ONLY ALLOWED TO MODIFY CODE BETWEEN '///<<< BEGIN' AND '///<<< END'.
    4. // PLEASE MODIFY AND REGENERETE IT IN THE DESIGNER FOR CLASS/MEMBERS/METHODS, ETC.
    5. // -------------------------------------------------------------------------------
    6. using System;
    7. using System.Collections;
    8. using System.Collections.Generic;
    9. using UnityEngine;
    10. ///<<< BEGIN WRITING YOUR CODE FILE_INIT
    11. ///<<< END WRITING YOUR CODE
    12. public class Player : behaviac.Agent
    13. ///<<< BEGIN WRITING YOUR CODE Player
    14. ///<<< END WRITING YOUR CODE
    15. {
    16. #region 格式化的内容,直接拷贝
    17. behaviac.EBTStatus _status = behaviac.EBTStatus.BT_RUNNING;
    18. private static string ExportedFilePath
    19. {
    20. get
    21. {
    22. string relativePath = "/Resources/behaviac/exported";
    23. if (Application.platform == RuntimePlatform.WindowsEditor)
    24. {
    25. return Application.dataPath + relativePath;
    26. }
    27. else if (Application.platform == RuntimePlatform.WindowsPlayer)
    28. {
    29. return Application.dataPath + relativePath;
    30. }
    31. else
    32. {
    33. return "Assets" + relativePath;
    34. }
    35. }
    36. }
    37. private bool InitPlayer()
    38. {
    39. behaviac.Debug.LogWarning("InitPlayer");
    40. bool bRet = this.btload("Agent");
    41. if (bRet)
    42. {
    43. this.btsetcurrent("Agent");
    44. }
    45. return bRet;
    46. }
    47. private bool InitBehavic()
    48. {
    49. behaviac.Debug.LogWarning("InitBehavic");
    50. behaviac.Workspace.Instance.FilePath = ExportedFilePath;
    51. behaviac.Workspace.Instance.FileFormat = behaviac.Workspace.EFileFormat.EFF_xml;
    52. return true;
    53. }
    54. void Awake()
    55. {
    56. InitBehavic();
    57. InitPlayer();
    58. }
    59. void Update()
    60. {
    61. if (_status == behaviac.EBTStatus.BT_RUNNING)
    62. {
    63. behaviac.Debug.LogWarning("Update");
    64. behaviac.Workspace.Instance.Update();//要想能调试,这句必须有
    65. _status = this.btexec();
    66. }
    67. }
    68. #endregion
    69. public void drift()
    70. {
    71. ///<<< BEGIN WRITING YOUR CODE drift
    72. UnityEngine.Debug.Log("drift");
    73. ///<<< END WRITING YOUR CODE
    74. }
    75. public bool IsInCollision()
    76. {
    77. ///<<< BEGIN WRITING YOUR CODE IsInCollision
    78. return false;
    79. ///<<< END WRITING YOUR CODE
    80. }
    81. public void moveForward()
    82. {
    83. ///<<< BEGIN WRITING YOUR CODE moveForward
    84. UnityEngine.Debug.Log("moveForward");
    85. ///<<< END WRITING YOUR CODE
    86. }
    87. ///<<< BEGIN WRITING YOUR CODE CLASS_PART
    88. ///<<< END WRITING YOUR CODE
    89. }
    90. ///<<< BEGIN WRITING YOUR CODE FILE_UNINIT
    91. ///<<< END WRITING YOUR CODE

    12. 点击Unity 运行,紧接着按照下图步骤在BehaviacDesigner端连接Unity(所有操作默认即可)

    13. 最多等待20s, 可以看到BehaviacDesigner端断点被击中(断点从紫色变成黄色)

    这里让这个断点重复50次,如果想让断点继续执行下一步,就点击左上角蓝色小三角

    tips:

    • F9可以直接在节点上打断点,多次按F9就是取消断点
    • 代码中IsInCollision() 中return false;换成return true; 行为树逻辑就走了上面drfit() 而不是moveForward(). 可以自己试试。下面截图是我跑出来的效果

  • 相关阅读:
    web前端设计与开发期末作品 旅游咨询网站 HTML5期末大作业 HTML+CSS旅游社网站5个页面 关于制作网页主题论述
    【LeetCode-98】
    【牛客网】:链表的回文结构(提升)
    Linux网络配置
    IOS OpenGL ES GPUImage 图像显示亮度最高的像素,其他为黑 GPUImageNonMaximumSuppressionFilte
    FL Studio21中文版本新增功能FL2023完整版
    openGauss学习笔记-125 openGauss 数据库管理-设置账本数据库-校验账本数据一致性
    ubuntu提高 github下载速度
    深入浅出PyTorch——PyTorch可视化
    B2B企业老板和市场人必看:如何做好数字化营销
  • 原文地址:https://blog.csdn.net/cz2011301070/article/details/132993553