void AssignTerrainToVS(Terrain terrain, VegetationSystem vs, VegetationPackage vegetationPackage, PersistentVegetationStoragePackage storagePackage)
    {
        vs.AutoselectTerrain = false;

        vs.CurrentVegetationPackage = vegetationPackage;
        PersistentVegetationStorage storage = vs.GetComponent <PersistentVegetationStorage>();

        if (storage != null)
        {
            storage.SetPersistentVegetationStoragePackage(storagePackage);
        }
        if (vs.InitDone)
        {
            vs.HotswapTerrain(terrain, new UnityTerrainData(terrain));
        }
        else
        {
            vs.SetTerrain(terrain);
        }
    }
示例#2
0
    void SetupFromPrefab()
    {
        _assetsPath = RemoveTrailingSlash(_assetsPath); // ensures that there isn't an ending slash

        if (!AssetDatabase.IsValidFolder(_assetsPath))
        {
            if (_debugToLog)
            {
                Debug.Log("Asset path is invalid. Creating your folders");
            }
            CreateAssetFolders();
        }

        if (_forceItemsEnabled) // Make sure all Vegetation is enabled on Vegetation Package
        {
            _vegetationPackage = _vegetationSystemPrefab.GetComponent <VegetationSystem>().CurrentVegetationPackage;
            SetAllItemsToRuntimeSpawn();
        }
        if (_autoBake) // if going to rebake then delete any existing packages
        {
            ClearAllStorageInPath();
        }

        var terrains = _rootObject ? _rootObject.GetComponentsInChildren <Terrain>() : GameObject.FindObjectsOfType <Terrain>();
        int totalNum = terrains.Length;
        int counter  = 0;

        foreach (Terrain terrain in terrains)
        {
            // first check if a Vegetation System already exists
            VegetationSystem _vegetationSystem = terrain.gameObject.GetComponentInChildren <VegetationSystem>();
            if (_vegetationSystem != null)
            { // add if already there, destroy
                DestroyImmediate(_vegetationSystem.gameObject);
            }

            GameObject       vegetationSystemObject = Instantiate(_vegetationSystemPrefab, terrain.gameObject.transform);
            VegetationSystem vegetationSystem       = vegetationSystemObject.GetComponent <VegetationSystem>();
            if (vegetationSystem)
            {
                vegetationSystem.AutoselectTerrain = false;
                vegetationSystem.SetTerrain(terrain);

                counter++;
                if (_debugToLog)
                {
                    Debug.Log("Added VS Prefab to " + terrain.name + " (" + counter + " of " + totalNum + ")");
                }
                if (_addPersistentStorage)
                {
                    if (_debugToLog)
                    {
                        Debug.Log("Adding Persistent Storage " + terrain.name + " (" + counter + " of " + totalNum + ")");
                    }
                    DoAddPersistentStorage(vegetationSystem);
                }
            }
        }

        EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
    }