diff --git a/Source/Editor/Modules/SceneModule.cs b/Source/Editor/Modules/SceneModule.cs index 954e3bd50..f5471ec33 100644 --- a/Source/Editor/Modules/SceneModule.cs +++ b/Source/Editor/Modules/SceneModule.cs @@ -534,6 +534,8 @@ namespace FlaxEditor.Modules { node.ParentNode = parentNode; } + + actor.OnActorSpawned(); } private void OnActorDeleted(Actor actor) diff --git a/Source/Engine/Level/Actor.cs b/Source/Engine/Level/Actor.cs index dbe8a89b5..7c34b5d7e 100644 --- a/Source/Engine/Level/Actor.cs +++ b/Source/Engine/Level/Actor.cs @@ -116,6 +116,15 @@ namespace FlaxEngine LocalTransform = Transform.Identity; } + /// + /// Called in-editor when an actor is added to the scene. + /// If not in the editor, this function will not be called. + /// + public virtual void OnActorSpawned() + { + + } + /// /// Creates a new child actor of the given type. /// diff --git a/Source/Engine/Level/Actors/BoxCollider.cs b/Source/Engine/Level/Actors/BoxCollider.cs new file mode 100644 index 000000000..f9343eb74 --- /dev/null +++ b/Source/Engine/Level/Actors/BoxCollider.cs @@ -0,0 +1,27 @@ +using System; + +namespace FlaxEngine +{ + partial class BoxCollider + { + /// + public override void OnActorSpawned() + { + base.OnActorSpawned(); + if (Parent is StaticModel model) + { + Vector3 modelScale = model.Scale; + Vector3 modelSize = model.Box.Size; + Vector3 modelCenter = model.Box.Center - model.Position; + Vector3 colliderSize = modelSize / modelScale; + Vector3 colliderCenter = modelCenter / modelScale; + + Size = colliderSize; + Center = colliderCenter; + + // Undo Rotation + Orientation *= Quaternion.Invert(Orientation); + } + } + } +}