private void DoImportTrees() { if (!ImportTreeInstancesOnly) { GTreePrototypeGroup treeGroup = DesData.Foliage.Trees; if (treeGroup == null || treeGroup == GRuntimeSettings.Instance.foliageDefault.trees) { CreateNewTreePrototypesGroup = true; } if (CreateNewTreePrototypesGroup) { treeGroup = ScriptableObject.CreateInstance <GTreePrototypeGroup>(); #if UNITY_EDITOR if (!Application.isPlaying) { string path = AssetDatabase.GetAssetPath(DesData); string directory = Path.GetDirectoryName(path); string filePath = Path.Combine(directory, string.Format("Trees_{0}_{1}.asset", DesData.Id, System.DateTime.Now.Ticks)); AssetDatabase.CreateAsset(treeGroup, filePath); } #endif DesData.Foliage.Trees = treeGroup; } treeGroup.Prototypes.Clear(); TreePrototype[] treePrototypes = SrcData.treePrototypes; for (int i = 0; i < treePrototypes.Length; ++i) { GTreePrototype proto = (GTreePrototype)treePrototypes[i]; treeGroup.Prototypes.Add(proto); } GCommon.SetDirty(treeGroup); } DesData.Foliage.TreeInstances.Clear(); TreeInstance[] treeInstances = SrcData.treeInstances; for (int i = 0; i < treeInstances.Length; ++i) { GTreeInstance t = (GTreeInstance)treeInstances[i]; DesData.Foliage.TreeInstances.Add(t); } if (DesTerrain != null) { DesData.Foliage.SetTreeRegionDirty(GCommon.UnitRect); DesTerrain.UpdateTreesPosition(); DesData.Foliage.ClearTreeDirtyRegions(); } DesData.SetDirty(GTerrainData.DirtyFlags.Foliage); //GC.Collect(); }
private void CreateSharedTrees() { TreeGroups.Clear(); TreeGroupIndices.Clear(); for (int i = 0; i < Terrains.Count; ++i) { Terrain t = Terrains[i]; TreePrototype[] treePrototypes = t.terrainData.treePrototypes; int treeGroupIndex = -1; for (int j = 0; j < TreeGroups.Count; ++j) { if (TreeGroups[j].Equals(treePrototypes)) { treeGroupIndex = j; break; } } if (treeGroupIndex >= 0) { TreeGroupIndices.Add(treeGroupIndex); } else { GTreePrototypeGroup group = GTreePrototypeGroup.Create(treePrototypes); TreeGroups.Add(group); TreeGroupIndices.Add(TreeGroups.Count - 1); } } #if UNITY_EDITOR if (!Application.isPlaying) { GUtilities.EnsureDirectoryExists(DataDirectory); for (int i = 0; i < TreeGroups.Count; ++i) { GTreePrototypeGroup group = TreeGroups[i]; group.name = string.Format("{0}{1}_{2}", "SharedTrees", i.ToString(), ConversionName); string assetPath = string.Format("{0}.asset", Path.Combine(DataDirectory, group.name)); AssetDatabase.CreateAsset(group, assetPath); } } #endif }
private void ConvertToTreePrototypeGroup() { GTreePrototypeGroup group = ScriptableObject.CreateInstance <GTreePrototypeGroup>(); for (int i = 0; i < instance.Prototypes.Count; ++i) { GameObject prefab = instance.Prototypes[i]; if (prefab != null) { group.Prototypes.Add(GTreePrototype.Create(prefab)); } } string path = AssetDatabase.GetAssetPath(instance); string directory = Path.GetDirectoryName(path); string filePath = Path.Combine(directory, string.Format("{0}_{1}_{2}.asset", instance.name, "Trees", GCommon.GetUniqueID())); AssetDatabase.CreateAsset(group, filePath); Selection.activeObject = group; }