/// <summary> /// Spawn a number of environments. The enviromentment must include SpawnableEnv /// </summary> public void SpawnSpawnableEnv(GameObject parent, int numInstances, GameObject envPrefab) { CreateSceneParameters csp = new CreateSceneParameters(LocalPhysicsMode.Physics3D); Vector3 spawnStartPos = parent.transform.position; SpawnableEnv spawnableEnv = envPrefab.GetComponent <SpawnableEnv>(); spawnableEnv.UpdateBounds(); Vector3 step = new Vector3(0f, 0f, spawnableEnv.bounds.size.z + (spawnableEnv.bounds.size.z * spawnableEnv.paddingBetweenEnvs)); if (spawnableEnv.CreateUniquePhysicsScene) { step = Vector3.zero; } for (int i = 0; i < numInstances; i++) { var agent = Agent.Instantiate(envPrefab, spawnStartPos, envPrefab.gameObject.transform.rotation); spawnStartPos += step; if (spawnableEnv.CreateUniquePhysicsScene) { Scene scene = SceneManager.CreateScene($"SpawnedEnv-{i}", csp); PhysicsScene physicsScene = scene.GetPhysicsScene(); SceneManager.MoveGameObjectToScene(agent, scene); SpawnableEnv spawnedEnv = agent.GetComponent <SpawnableEnv>(); spawnedEnv.SetSceneAndPhysicsScene(scene, physicsScene); // only render the 1st scene if (i == 0) { // var cam = Camera.FindObjectOfType<Camera>(); // cam.scene = scene; // // Camera.main.enabled = false; } } } }