         set{transform.root.physicsBody = newValue}
     }
 
-    override init() {
-        guard let scene = GameViewController.mainView.scene as? Scene else {
-            fatalError("No Scene in current view")
+    init(scene: Scene? = nil) {
+        super.init()
+        guard let targetScene = scene ?? Scene.loadingScene ?? Scene.currentScene else {
+            fatalError("No Scene were found")
         }
-        self.scene = scene
-        super.init()
+        self.scene = targetScene
         self.addComponent(transform)
-        scene.gameObjects.insert(self)
-        transform.updateRoot()
+        self.scene.gameObjects.insert(self)
+        setupGameObject()
+    }
+    
+    func setupGameObject() {
+        
     }
     
     override func addComponent(component: GKComponent) {
+        scene.validateComponent(component)
         super.addComponent(component)
-        scene.validateComponent(component)
         if let component = component as? Component {
             component.OnComponentAdded()
         }

    func runAction(action: SKAction) {
        transform.root.runAction(action)
    }
}

import SpriteKit
import GameplayKit

class GameObject: GKEntity {
    var active: Bool = true {
