Exemple #1
0
        /// <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;
                    }
                }
            }
        }