public void CleanScenes() { foreach (var terrain in Terrains) { var prototypes = new HashSet <int>(); for (int i = 0; i < terrain.terrainData.treePrototypes.Length; i++) { if (PrefabsPrototypes.Contains(terrain.terrainData.treePrototypes[i].prefab)) { prototypes.Add(i); } } var newInstances = new List <TreeInstance>(); foreach (var terrainDataTreeInstance in terrain.terrainData.treeInstances) { if (prototypes.Contains(terrainDataTreeInstance.prototypeIndex)) { continue; } newInstances.Add(terrainDataTreeInstance); } terrain.terrainData.treeInstances = newInstances.ToArray(); terrain.Flush(); } }
public List <ScenePrefabDataSet> Import(IPoolDataSetFactory dataSetFactory, IPoolDataSetItemFactory dataSetItemFactory) { var result = new List <ScenePrefabDataSet>(); var datasets = new Dictionary <GameObject, IDataset>(); foreach (var prefabsPrototype in PrefabsPrototypes) { var dataset = dataSetFactory.Create(); datasets.Add(prefabsPrototype, dataset); result.Add(new ScenePrefabDataSet(dataset, prefabsPrototype)); } foreach (var terrain in Terrains) { var prototypes = new HashSet <int>(); for (int i = 0; i < terrain.terrainData.treePrototypes.Length; i++) { if (PrefabsPrototypes.Contains(terrain.terrainData.treePrototypes[i].prefab)) { prototypes.Add(i); } } for (int i = 0; i < terrain.terrainData.treeInstanceCount; i++) { var newDataSetItem = dataSetItemFactory.Create(); var treeInstance = terrain.terrainData.treeInstances[i]; if (!prototypes.Contains(treeInstance.prototypeIndex)) { continue; } newDataSetItem.Position = terrain.transform.position + Vector3.Scale(terrain.terrainData.size, treeInstance.position); newDataSetItem.Rotation = new Vector3(0, treeInstance.rotation, 0); newDataSetItem.Scale = new Vector3(treeInstance.widthScale, treeInstance.heightScale, treeInstance.widthScale); datasets[terrain.terrainData.treePrototypes[treeInstance.prototypeIndex].prefab].Add(newDataSetItem); } } return(result); }