コード例 #1
0
        void ApplySettingsToTerrains(Terrain[] terrains)
        {
            int index = 0;

            try
            {
                foreach (var terrain in terrains)
                {
                    EditorUtility.DisplayProgressBar("Applying settings changes on terrains", string.Format("Updating terrain tile {0}", terrain.name), ((float)index / terrains.Length));

                    if (m_Settings.EnableBasicSettings)
                    {
                        Undo.RecordObject(terrain, "Terrain property change");

                        terrain.groupingID           = m_Settings.GroupingID;
                        terrain.allowAutoConnect     = m_Settings.AutoConnect;
                        terrain.drawHeightmap        = m_Settings.DrawHeightmap;
                        terrain.drawInstanced        = m_Settings.DrawInstanced;
                        terrain.heightmapPixelError  = m_Settings.PixelError;
                        terrain.basemapDistance      = m_Settings.BaseMapDistance;
                        terrain.shadowCastingMode    = m_Settings.ShadowCastingMode;
                        terrain.materialTemplate     = m_Settings.MaterialTemplate;
                        terrain.reflectionProbeUsage = m_Settings.ReflectionProbeUsage;
#if UNITY_2019_2_OR_NEWER
#else
                        terrain.materialType = m_Settings.MaterialType;
                        if (m_Settings.MaterialType != Terrain.MaterialType.Custom)
                        {
                            terrain.legacySpecular  = m_Settings.LegacySpecular;
                            terrain.legacyShininess = m_Settings.LegacyShininess;
                        }
#endif
                    }

                    if (m_Settings.EnableMeshResSettings)
                    {
                        Undo.RecordObject(terrain.terrainData, "TerrainData property change");
                        Vector3 size = new Vector3(m_Settings.TerrainWidth, m_Settings.TerrainHeight, m_Settings.TerrainLength);
                        terrain.terrainData.size = size;
                        terrain.terrainData.SetDetailResolution(m_Settings.DetailResolutaion, m_Settings.DetailResolutionPerPatch);
                    }

                    if (m_Settings.EnableTextureResSettings)
                    {
                        terrain.terrainData.baseMapResolution = m_Settings.BaseTextureResolution;
                        if (m_Settings.AlphaMapResolution != terrain.terrainData.alphamapResolution)
                        {
                            ToolboxHelper.ResizeControlTexture(terrain.terrainData, m_Settings.AlphaMapResolution);
                        }
                        if (m_Settings.HeightMapResolution != terrain.terrainData.heightmapResolution)
                        {
                            ToolboxHelper.ResizeHeightmap(terrain.terrainData, m_Settings.HeightMapResolution);
                        }
                    }

                    if (m_Settings.EnableTreeSettings)
                    {
                        Undo.RecordObject(terrain, "Terrain property change");

                        terrain.drawTreesAndFoliage         = m_Settings.DrawTreesAndFoliage;
                        terrain.bakeLightProbesForTrees     = m_Settings.BakeLightProbesForTrees;
                        terrain.deringLightProbesForTrees   = m_Settings.DeringLightProbesForTrees;
                        terrain.preserveTreePrototypeLayers = m_Settings.PreserveTreePrototypeLayers;
                        terrain.detailObjectDistance        = m_Settings.DetailObjectDistance;
                        terrain.collectDetailPatches        = m_Settings.CollectDetailPatches;
                        terrain.detailObjectDensity         = m_Settings.DetailObjectDensity;
                        terrain.treeDistance            = m_Settings.TreeDistance;
                        terrain.treeBillboardDistance   = m_Settings.TreeBillboardDistance;
                        terrain.treeCrossFadeLength     = m_Settings.TreeCrossFadeLength;
                        terrain.treeMaximumFullLODCount = m_Settings.TreeMaximumFullLODCount;
                    }

                    if (m_Settings.EnableWindSettings)
                    {
                        Undo.RecordObject(terrain.terrainData, "TerrainData property change");
                        terrain.terrainData.wavingGrassStrength = m_Settings.WavingGrassStrength;
                        terrain.terrainData.wavingGrassSpeed    = m_Settings.WavingGrassSpeed;
                        terrain.terrainData.wavingGrassAmount   = m_Settings.WavingGrassAmount;
                        terrain.terrainData.wavingGrassTint     = m_Settings.WavingGrassTint;
                    }

                    index++;
                }
            }
            finally
            {
                AssetDatabase.Refresh();
                EditorUtility.ClearProgressBar();
            }
        }
コード例 #2
0
        void ApplySettingsToTerrains(Terrain[] terrains, string errorContext = "")
        {
            int index = 0;

            try
            {
                bool continueEdit = true;

                // Only show this warning if the user has Mesh Settings enabled.
                if (m_Settings.EnableMeshResSettings)
                {
                    var newSize = new Vector3(m_Settings.TerrainWidth, m_Settings.TerrainHeight,
                                              m_Settings.TerrainLength);
                    foreach (var terrain in terrains)
                    {
                        // If any terrain has a size that's different from the specified settings, let's confirm
                        // the action.
                        if (terrain.terrainData.size != newSize)
                        {
                            var message =
                                "Some terrains have different sizes than the settings specified. This operation will resize the terrains potentially resulting in gaps and/or overlaps.";
                            if (string.IsNullOrEmpty(errorContext))
                            {
                                continueEdit = EditorUtility.DisplayDialog("Confirm",
                                                                           $"{message}\nAre you sure you want to continue?",
                                                                           "Continue", "Cancel");
                            }
                            else
                            {
                                continueEdit = EditorUtility.DisplayDialog("Confirm",
                                                                           $"1. {errorContext}\n2. {message}\n\nAre you sure you want to continue?",
                                                                           "Continue", "Cancel");
                            }
                            break;
                        }
                    }
                }

                if (continueEdit)
                {
                    foreach (var terrain in terrains)
                    {
                        EditorUtility.DisplayProgressBar("Applying settings changes on terrains",
                                                         string.Format("Updating terrain tile {0}", terrain.name),
                                                         ((float)index / terrains.Length));

                        if (m_Settings.EnableBasicSettings)
                        {
                            Undo.RecordObject(terrain, "Terrain property change");

                            terrain.groupingID           = m_Settings.GroupingID;
                            terrain.allowAutoConnect     = m_Settings.AutoConnect;
                            terrain.drawHeightmap        = m_Settings.DrawHeightmap;
                            terrain.drawInstanced        = m_Settings.DrawInstanced;
                            terrain.heightmapPixelError  = m_Settings.PixelError;
                            terrain.basemapDistance      = m_Settings.BaseMapDistance;
                            terrain.shadowCastingMode    = m_Settings.ShadowCastingMode;
                            terrain.materialTemplate     = m_Settings.MaterialTemplate;
                            terrain.reflectionProbeUsage = m_Settings.ReflectionProbeUsage;
#if UNITY_2019_2_OR_NEWER
#else
                            terrain.materialType = m_Settings.MaterialType;
                            if (m_Settings.MaterialType != Terrain.MaterialType.Custom)
                            {
                                terrain.legacySpecular  = m_Settings.LegacySpecular;
                                terrain.legacyShininess = m_Settings.LegacyShininess;
                            }
#endif
                        }

                        if (m_Settings.EnableMeshResSettings)
                        {
                            Undo.RecordObject(terrain.terrainData, "TerrainData property change");
                            Vector3 size = new Vector3(m_Settings.TerrainWidth, m_Settings.TerrainHeight,
                                                       m_Settings.TerrainLength);
                            terrain.terrainData.size = size;
                            terrain.terrainData.SetDetailResolution(m_Settings.DetailResolutaion,
                                                                    m_Settings.DetailResolutionPerPatch);
                        }

                        if (m_Settings.EnableTextureResSettings)
                        {
                            terrain.terrainData.baseMapResolution = m_Settings.BaseTextureResolution;
                            if (m_Settings.AlphaMapResolution != terrain.terrainData.alphamapResolution)
                            {
                                ToolboxHelper.ResizeControlTexture(terrain.terrainData, m_Settings.AlphaMapResolution);
                            }

                            if (m_Settings.HeightMapResolution != terrain.terrainData.heightmapResolution)
                            {
                                ToolboxHelper.ResizeHeightmap(terrain.terrainData, m_Settings.HeightMapResolution);
                            }
                        }

                        if (m_Settings.EnableTreeSettings)
                        {
                            Undo.RecordObject(terrain, "Terrain property change");

                            terrain.drawTreesAndFoliage         = m_Settings.DrawTreesAndFoliage;
                            terrain.bakeLightProbesForTrees     = m_Settings.BakeLightProbesForTrees;
                            terrain.deringLightProbesForTrees   = m_Settings.DeringLightProbesForTrees;
                            terrain.preserveTreePrototypeLayers = m_Settings.PreserveTreePrototypeLayers;
                            terrain.detailObjectDistance        = m_Settings.DetailObjectDistance;
                            terrain.collectDetailPatches        = m_Settings.CollectDetailPatches;
                            terrain.detailObjectDensity         = m_Settings.DetailObjectDensity;
                            terrain.treeDistance            = m_Settings.TreeDistance;
                            terrain.treeBillboardDistance   = m_Settings.TreeBillboardDistance;
                            terrain.treeCrossFadeLength     = m_Settings.TreeCrossFadeLength;
                            terrain.treeMaximumFullLODCount = m_Settings.TreeMaximumFullLODCount;
                        }

                        if (m_Settings.EnableWindSettings)
                        {
                            Undo.RecordObject(terrain.terrainData, "TerrainData property change");
                            terrain.terrainData.wavingGrassStrength = m_Settings.WavingGrassStrength;
                            terrain.terrainData.wavingGrassSpeed    = m_Settings.WavingGrassSpeed;
                            terrain.terrainData.wavingGrassAmount   = m_Settings.WavingGrassAmount;
                            terrain.terrainData.wavingGrassTint     = m_Settings.WavingGrassTint;
                        }

                        index++;
                    }
                }
            }
            finally
            {
                AssetDatabase.Refresh();
                EditorUtility.ClearProgressBar();
            }
        }