• 注册
欢迎加入behaviac Q&A网站。behaviac是腾讯开源组件https://github.com/TencentOpen/behaviac 官方网站:http://www.behaviac.com/,提供各种文档和教程及手册 为了您及时的获得您最新问题的评论或者回答,请提供并验证您的邮箱

只导出XML会有空指针

0 喜欢 0 不喜欢
52 浏览

 

Unity版本:5.3.5.

Behaviac版本:3.5.13

1. 场景里放一个GameObject,挂在继承于Agent的脚本。

2. 将配置好的节点Xml导入到项目中,使用如下代码加载:

if (GUILayout.Button("AI加载"))
        {
            behaviac.Workspace.Instance.FilePath = Application.dataPath;
            behaviac.Workspace.Instance.FileFormat = behaviac.Workspace.EFileFormat.EFF_xml;

            behaviac.Config.IsLogging = true;
            var agent = GameObject.FindObjectOfType<DJTest>();
            if (agent != null)
            {
                string path = Application.dataPath + "/Code/Behaviac/DJNodes/DJTest";
                UnityEngine.Debug.Log("path: " + path);
                var result = agent.btload(path, true);
                if (result)
                {
                    agent.btsetcurrent(path);
                }
                else
                {
                    behaviac.Debug.Log("没有加载到数据");
                }
            }
        }

imageimage

 

3. 加载后,会报空指针,跟踪后发现去寻找

	// DJTest
			meta = new AgentMeta();
			_agentMetas[1241053461] = meta;
			meta.RegisterMemberProperty(2269881519, new CMemberProperty<int>("hp", delegate(Agent self, int value) { ((DJTest)self).hp = value; }, delegate(Agent self) { return ((DJTest)self).hp; }));
			meta.RegisterMemberProperty(4050060769, new CMemberProperty<bool>("isDead", delegate(Agent self, bool value) { ((DJTest)self).isDead = value; }, delegate(Agent self) { return ((DJTest)self).isDead; }));
			meta.RegisterMethod(2589968182, new CAgentMethodVoid<int>(delegate(Agent self, int param0) { ((DJTest)self).ChangeHp(param0); }));
			meta.RegisterMethod(4271107009, new CAgentMethodVoid<string, string>(delegate(Agent self, string param0, string param1) { ((DJTest)self).ExecuteLua(param0, param1); }));
			meta.RegisterMethod(2331964840, new CAgentMethodVoid(delegate(Agent self) { ((DJTest)self).ReBorn(); }));

 

中的meta文件。这是自动生成的C#脚本,按教程里的文档来看,应该只用导入xml。不用导入C#啊。

4. 之后我导入了该自动生成的C#文件,发现可以加载成功,但执行完agent.btexec();也没有发现Ai启动起来。。

 

教程文档看了很多遍,还是不理解这一套东西的操作步骤。。求帮忙,看看是哪里出了问题,或者是理解出了问题。。

 

最新提问 8月 31, 2016 用户: 邪让多杰 (140 分)

1个回答

0 喜欢 0 不喜欢

你第3点说到的C#文件AgentProperties.cs需要包含进你的项目中一起编译,详细的文档请看:

http://www.behaviac.com/language/zh/tutorial4_3_export_cs/

第4点你说执行agent.btexec()后没发现AI启动,你这个方法是放在你的游戏Update()方法中每帧调用的吗?

 

最新回答 9月 1, 2016 用户: cainhuang (33,810 分)

十分感谢你的回答,我已经调通了。

还有最后一个疑问。

 

我使用了:path: E:/Work/ProJects/JohnWork/Unity/JohnWork/Assets/Resources/behaviac/exported/DJTest

 

这样的地址,使用var result = agent.btload(path, true);加载agent。

 

然后在加载过程中,WorkSpace.cs 的1602行 处会有检查错误。

            if (bLoadResult)
            {
                Debug.Check(pBT.GetName() == relativePath);//这里报错

                if (!bNewly)
                {
                    Debug.Check(BehaviorTrees[pBT.GetName()] == pBT);
                }
            }

 

pBT获取的名字是"DJTest",而relativePath 是 前面那串Path 。不知道是不是误报,把暂停取消就好了,但错误每次加载都有。

...