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); } }
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()); }