ソースを参照

Fix lookup of C# types by their engine name

Raul Santos 2 年 前
コミット
65d0d05fa7

+ 27 - 3
modules/mono/glue/GodotSharp/GodotSharp/Core/Bridge/ScriptManagerBridge.cs

@@ -243,9 +243,33 @@ namespace Godot.Bridge
 
             if (wrapperType == null)
             {
-                wrapperType = AppDomain.CurrentDomain.GetAssemblies()
-                    .FirstOrDefault(a => a.GetName().Name == "GodotSharpEditor")?
-                    .GetType("Godot." + nativeTypeNameStr);
+                wrapperType = GetTypeByGodotClassAttr(typeof(GodotObject).Assembly, nativeTypeNameStr);
+            }
+
+            if (wrapperType == null)
+            {
+                var editorAssembly = AppDomain.CurrentDomain.GetAssemblies()
+                    .FirstOrDefault(a => a.GetName().Name == "GodotSharpEditor");
+                wrapperType = editorAssembly?.GetType("Godot." + nativeTypeNameStr);
+
+                if (wrapperType == null)
+                {
+                    wrapperType = GetTypeByGodotClassAttr(editorAssembly, nativeTypeNameStr);
+                }
+            }
+
+            static Type? GetTypeByGodotClassAttr(Assembly assembly, string nativeTypeNameStr)
+            {
+                var types = assembly.GetTypes();
+                foreach (var type in types)
+                {
+                    var attr = type.GetCustomAttribute<GodotClassNameAttribute>();
+                    if (attr?.Name == nativeTypeNameStr)
+                    {
+                        return type;
+                    }
+                }
+                return null;
             }
 
             static bool IsStatic(Type type) => type.IsAbstract && type.IsSealed;