diff --git a/Source/Engine/Level/Level.cpp b/Source/Engine/Level/Level.cpp index 2746ce65e..049e9ebf3 100644 --- a/Source/Engine/Level/Level.cpp +++ b/Source/Engine/Level/Level.cpp @@ -140,15 +140,31 @@ bool LevelImpl::spawnActor(Actor* actor, Actor* parent) Log::ArgumentNullException(TEXT("Cannot spawn null actor.")); return true; } - if (Level::Scenes.IsEmpty()) - { - Log::InvalidOperationException(TEXT("Cannot spawn actor. No scene loaded.")); - return true; - } - if (parent == nullptr) - parent = Level::Scenes[0]; - actor->SetParent(parent, true, true); + if (actor->Is()) + { + // Spawn scene + actor->PostSpawn(); + actor->OnTransformChanged(); + { + SceneBeginData beginData; + actor->BeginPlay(&beginData); + beginData.OnDone(); + } + CallSceneEvent(SceneEventType::OnSceneLoaded, (Scene*)actor, actor->GetID()); + } + else + { + // Spawn actor + if (Level::Scenes.IsEmpty()) + { + Log::InvalidOperationException(TEXT("Cannot spawn actor. No scene loaded.")); + return true; + } + if (parent == nullptr) + parent = Level::Scenes[0]; + actor->SetParent(parent, true, true); + } return false; }