diff --git a/Source/Engine/Scripting/Object.cs b/Source/Engine/Scripting/Object.cs
index b86ed00d8..f35f3fffd 100644
--- a/Source/Engine/Scripting/Object.cs
+++ b/Source/Engine/Scripting/Object.cs
@@ -221,6 +221,14 @@ namespace FlaxEngine
return obj is Object o ? Internal_GetUnmanagedInterface(o.__unmanagedPtr, type) : IntPtr.Zero;
}
+ ///
+ /// Gets the managed object from the native object pointer.
+ ///
+ /// The pointer to the unmanaged (native) object.
+ /// The object.
+ [MethodImpl(MethodImplOptions.InternalCall)]
+ public static extern Object FromUnmanagedPtr(IntPtr ptr);
+
///
public override int GetHashCode()
{
diff --git a/Source/Engine/Scripting/ScriptingObject.cpp b/Source/Engine/Scripting/ScriptingObject.cpp
index 8075aa67c..ee3dfc438 100644
--- a/Source/Engine/Scripting/ScriptingObject.cpp
+++ b/Source/Engine/Scripting/ScriptingObject.cpp
@@ -727,6 +727,14 @@ public:
return nullptr;
}
+ static MonoObject* FromUnmanagedPtr(ScriptingObject* obj)
+ {
+ MonoObject* result = nullptr;
+ if (obj)
+ result = obj->GetOrCreateManagedInstance();
+ return result;
+ }
+
static void InitRuntime()
{
ADD_INTERNAL_CALL("FlaxEngine.Object::Internal_Create1", &Create1);
@@ -739,6 +747,7 @@ public:
ADD_INTERNAL_CALL("FlaxEngine.Object::Internal_TryFindObject", &TryFindObject);
ADD_INTERNAL_CALL("FlaxEngine.Object::Internal_ChangeID", &ChangeID);
ADD_INTERNAL_CALL("FlaxEngine.Object::Internal_GetUnmanagedInterface", &GetUnmanagedInterface);
+ ADD_INTERNAL_CALL("FlaxEngine.Object::FromUnmanagedPtr", &FromUnmanagedPtr);
}
#else