diff --git a/Source/Engine/Level/Actor.cpp b/Source/Engine/Level/Actor.cpp
index 7e2329389..6e8c2e7b4 100644
--- a/Source/Engine/Level/Actor.cpp
+++ b/Source/Engine/Level/Actor.cpp
@@ -1356,6 +1356,21 @@ bool Actor::IsPrefabRoot() const
return _isPrefabRoot != 0;
}
+Actor* Actor::GetPrefabRoot()
+{
+ if (!this->HasPrefabLink())
+ {
+ return NULL;
+ }
+
+ Actor* result = this;
+ while (!result == NULL && !result->IsPrefabRoot())
+ {
+ result = result->GetParent();
+ }
+ return result;
+}
+
Actor* Actor::FindActor(const StringView& name) const
{
Actor* result = nullptr;
diff --git a/Source/Engine/Level/Actor.h b/Source/Engine/Level/Actor.h
index f66d13f40..d34d66e49 100644
--- a/Source/Engine/Level/Actor.h
+++ b/Source/Engine/Level/Actor.h
@@ -737,6 +737,12 @@ public:
///
API_PROPERTY() bool IsPrefabRoot() const;
+ ///
+ /// Gets the root of the prefab this actor is attached to.
+ ///
+ /// The root prefab object, or null if this actor is not a prefab.
+ API_FUNCTION() Actor* GetPrefabRoot();
+
public:
///
/// Tries to find the actor with the given name in this actor hierarchy (checks this actor and all children hierarchy).