Beispiel #1
0
        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();
        }
Beispiel #2
0
        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
        }
Beispiel #3
0
        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;
        }