根据现有C++的属性树lib库,编译UE4所用蓝图库。版本是4.19和4.25。
Lib库文件目录如下:
代码调用示例如下:
#include <iostream>
#include <Main/globals.hxx>
#include <Scripting/NasalSys.hxx>
#include <LuaScripting/LuaSys.hxx>
#include <simgear/lua/lua.hpp>
//分系统模块
class MgrTest : public SGSubsystem
{
public:
MgrTest() {};
virtual ~MgrTest() {};
void init() {};
void bind() {};
void unbind() {};
void update(double dt) {
std::cout << "分系统模块更新函数" << std::endl;
};
private:
};
//属性树简监听器
class TestListener : public SGPropertyChangeListener {
public:
virtual void valueChanged(SGPropertyNode* node) {
std::cout << "属性值被改变:"<< node->getFloatValue() << std::endl;
}
};
int main()
{
//初始化全局控制系统
globals = new FGGlobals;
//写入属性树值
const char* treeTest ="fdm/oops/test";
globals->get_props()->setFloatValue(treeTest, 200);
//获取属性树值
float ret=globals->get_props()->getFloatValue(treeTest);
//往属性树添加监听器,无节点时候创建该节点
globals->get_props()->getNode(treeTest, true)->addChangeListener(new TestListener);
//写入值,触发监听器运行
globals->get_props()->setFloatValue(treeTest, 402);
//分系统注册和运算更新
globals->get_subsystem_mgr()->add("MgrTest", new MgrTest);
//运行LUA系统模块
globals->get_subsystem_mgr()->add("MGLuaSys", new MGLuaSys);
globals->get_subsystem_mgr()->bind(); //优先运行
globals->get_subsystem_mgr()->init();//优先运行
globals->get_subsystem_mgr()->update(0.0);//每帧运行
std::cout << ret << std::endl;
}
需要将属性树读取、写入、初始化、创建、监听等函数制作为蓝图节点,方便蓝图程序调用。