diff --git a/Source/Engine/Level/Actor.cs b/Source/Engine/Level/Actor.cs
index 936d38565..cd774fca6 100644
--- a/Source/Engine/Level/Actor.cs
+++ b/Source/Engine/Level/Actor.cs
@@ -123,6 +123,9 @@ namespace FlaxEngine
/// The child actor.
public Actor AddChild(Type type)
{
+ if (type.IsAbstract)
+ return null;
+
var result = (Actor)New(type);
result.SetParent(this, false, false);
return result;
@@ -135,6 +138,9 @@ namespace FlaxEngine
/// The child actor.
public T AddChild() where T : Actor
{
+ if (typeof(T).IsAbstract)
+ return null;
+
var result = New();
result.SetParent(this, false, false);
return result;
@@ -172,6 +178,9 @@ namespace FlaxEngine
var result = GetChild();
if (result == null)
{
+ if (typeof(T).IsAbstract)
+ return null;
+
result = New();
result.SetParent(this, false, false);
}
@@ -185,6 +194,9 @@ namespace FlaxEngine
/// The created script instance, null otherwise.
public Script AddScript(Type type)
{
+ if (type.IsAbstract)
+ return null;
+
var script = (Script)New(type);
script.Parent = this;
return script;
@@ -197,6 +209,9 @@ namespace FlaxEngine
/// The created script instance, null otherwise.
public T AddScript() where T : Script
{
+ if (typeof(T).IsAbstract)
+ return null;
+
var script = New();
script.Parent = this;
return script;
diff --git a/Source/Engine/Level/Actor.h b/Source/Engine/Level/Actor.h
index e9ad7793c..ec52a8c74 100644
--- a/Source/Engine/Level/Actor.h
+++ b/Source/Engine/Level/Actor.h
@@ -227,6 +227,9 @@ public:
T* result = (T*)GetChild(T::GetStaticClass());
if (!result)
{
+ if (T::GetStaticClass()->IsAbstract())
+ return nullptr;
+
result = New();
result->SetParent(this, false, false);
}
diff --git a/Source/Engine/Level/Level.cpp b/Source/Engine/Level/Level.cpp
index 98ad5a694..485b1a3b6 100644
--- a/Source/Engine/Level/Level.cpp
+++ b/Source/Engine/Level/Level.cpp
@@ -177,6 +177,12 @@ bool LevelImpl::spawnActor(Actor* actor, Actor* parent)
return true;
}
+ if (actor->GetType().ManagedClass->IsAbstract())
+ {
+ Log::Exception(TEXT("Cannot spawn abstract actor type."));
+ return true;
+ }
+
if (actor->Is())
{
// Spawn scene