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