puerts icon indicating copy to clipboard operation
puerts copied to clipboard

[Unreal]希望UE中导出的类型的constructor.name可以包含正确的类型名

Open wangyhbupt opened this issue 3 years ago • 6 comments

detail | 详细描述

从UE导出的类,目前其实例的constructor.name是空 希望UE中导出的类型的constructor.name可以包含正确的类型名

wangyhbupt avatar Nov 26 '21 04:11 wangyhbupt

涉及倒quickjs版本的同步修改,暂时改不了那么快,你用的是v8可以先在这两个地方加下: 在这里:https://github.com/Tencent/puerts/blob/master/unreal/Puerts/Source/JsEnv/Private/JsEnvImpl.cpp#L2225 还有这里:https://github.com/Tencent/puerts/blob/master/unreal/Puerts/Source/JsEnv/Private/CppObjectMapper.cpp#L176 添加这么一行:

Template->SetClassName(FV8Utils::ToV8String(Isolate, InStruct->GetName()));

chexiongsheng avatar Nov 29 '21 09:11 chexiongsheng

JsEnvImpl.cpp中 我加到2260行了 2225这里不行 Template还没有被赋值

wangyhbupt avatar Dec 03 '21 06:12 wangyhbupt

代码更新导致行数变后而已

chexiongsheng avatar Dec 03 '21 06:12 chexiongsheng

你好,我发现一个问题 我在TS中定义一个类 继承自一个UE中导出的类 当我在TS中使用MakeUClass时,在FJsEnvImpl::GetTemplateOfClass中看到InStruct的Name是正确的类名加上“_C0”.请问这怎么解决。 image image

wangyhbupt avatar Dec 03 '21 10:12 wangyhbupt

正确的类名加上“_C0”.

这就是UE的潜规则。如果前面的蓝图的名字被占用了,就会这么加个后缀。

chexiongsheng avatar Dec 03 '21 11:12 chexiongsheng

上述问题,我加了个判断,如果是TS中创建的类,就不修改Template中的classname,目前逻辑一切正常

if(!Cast<UJSGeneratedClass>(InStruct)){
            Template->SetClassName(FV8Utils::ToV8String(Isolate, InStruct->GetName()));
}

wangyhbupt avatar Dec 06 '21 07:12 wangyhbupt