Tencent / puerts

PUER(普洱) Typescript. Let's write your game in UE or Unity with TypeScript.
Other
5.03k stars 701 forks source link

[UE] Bug: 有关于ue.d.ts生成AnimBlueprintGeneratedConstantData的相关问题 #1153

Closed lzj10 closed 1 year ago

lzj10 commented 1 year ago

前置阅读 | Pre-reading

Puer的版本 | Puer Version

master 3459a0de

UE的版本 | UE Version

5.0

发生在哪个平台 | Platform

Editor(mac)

错误信息 | Error Message

1.同一命名空间下生成了大量的重名类型冲突,都在Engine.Transient namespace下面

image image image image

2.继承类型出现了 生成的重名private属性 __tid_AnimBlueprintGeneratedConstantData__: boolean;

Error        Puerts                    (0x0000076576B883F0)   Error E:/Develop/LL/trunk/client/Plugins/Puerts/Typing/ue/ue.d.ts (26053,15): Class 'import("ue").Game.Arts.Chr.Human.F1.Teammate.Monster.Bp.ABP_Climb_Monster.AnimBlueprintGeneratedConstantData' incorrectly extends base class 'import("ue").Game.Arts.Chr.Human.ABP.LinkedLayers.ABP_ClimbTemplate.AnimBlueprintGeneratedConstantData'.
Error        Puerts                      Types have separate declarations of a private property '__tid_AnimBlueprintGeneratedConstantData__'.
    namespace Game.Arts.Chr.Human.F1.Teammate.Monster.Face.ABP_Face_Cine_Monster {
        class AnimBlueprintGeneratedConstantData extends UE.Game.Arts.Chr.Human.F1.Teammate.Unit.Face.Abp.ABP_Unit_Face_Cine.AnimBlueprintGeneratedConstantData {
            constructor();
            /**
             * @deprecated use StaticStruct instead.
             */
            static StaticClass(): ScriptStruct;
            static StaticStruct(): ScriptStruct;
            private __tid_AnimBlueprintGeneratedConstantData__: boolean;
        }

    }
    namespace Game.Arts.Chr.Human.F1.Teammate.Unit.Face.Abp.ABP_Unit_Face_Cine {
        class AnimBlueprintGeneratedConstantData extends UE.AnimBlueprintConstantData {
            constructor();
            constructor(NameProperty_19: string, NameProperty_20: string, StructProperty_21: UE.AnimNodeFunctionRef, AnimBlueprintExtension_PropertyAccess: UE.AnimSubsystem_PropertyAccess, AnimBlueprintExtension_Base: UE.AnimSubsystem_Base);
            NameProperty_19: string;
            NameProperty_20: string;
            StructProperty_21: UE.AnimNodeFunctionRef;
            AnimBlueprintExtension_PropertyAccess: UE.AnimSubsystem_PropertyAccess;
            AnimBlueprintExtension_Base: UE.AnimSubsystem_Base;
            /**
             * @deprecated use StaticStruct instead.
             */
            static StaticClass(): ScriptStruct;
            static StaticStruct(): ScriptStruct;
            private __tid_AnimBlueprintGeneratedConstantData__: boolean;
        }

    }

问题重现 | Bug reproduce

感觉是 #701 的衍生错误,有动画蓝图之间的继承造成的

chexiongsheng commented 1 year ago

https://github.com/Tencent/puerts/issues/701 的衍生错误”指的是该修改引入的么? 那个修改只是允许一个package下有多个类,但以类名为Key,应该不会有重名的类。

chexiongsheng commented 1 year ago

问题2指的是继承链上有同名的class么?

chexiongsheng commented 1 year ago

问题2应该好改。 但问题1按理来说不应该出现

chexiongsheng commented 1 year ago

我看了下,问题1里头虽说名字相同,里面的字段是不同的。也就是ue允许一个package下有多个同名类??这啥坑爹设定?

chexiongsheng commented 1 year ago

问题1你试试过滤掉Engine.Transient,Engine.Transient里头可能是UE内部自己生成的一些类,过滤掉问题不大: DeclarationGenerator.cpp加入begin到end的部分。

void FTypeScriptDeclarationGenerator::Gen(UObject* ToGen)
{
    if (ToGen->GetName().Equals(TEXT("ArrayBuffer")) || ToGen->GetName().Equals(TEXT("JsObject")))
    {
        return;
    }
    //---------begin---------
    if (GetNamespace(ToGen).Equals(TEXT("Engine.Transient")))
    {
        return;
    }
    //---------end---------
lzj10 commented 1 year ago

好的我试一下

chexiongsheng commented 1 year ago

问题2试试这个commit:https://github.com/Tencent/puerts/commit/1a47bfad33a675600bcea4e75b9defe33f44ad52

问题1如果你试了没问题我也按这样处理。

lzj10 commented 1 year ago

问题1可以 这么改没问题