public void ResetDefaults(Terrain terrain, int index) { base.terrain = terrain; m_PrototypeIndex = index; DetailPrototype prototype; if (m_PrototypeIndex == -1) { prototype = new DetailPrototype() { renderMode = DetailRenderMode.VertexLit, noiseSeed = UnityEngine.Random.Range(1, int.MaxValue), useInstancing = true, useDensityScaling = true }; } else { prototype = base.terrain.terrainData.detailPrototypes[m_PrototypeIndex]; } m_DetailPrefab = prototype.prototype; m_MinWidth = prototype.minWidth; m_MaxWidth = prototype.maxWidth; m_MinHeight = prototype.minHeight; m_MaxHeight = prototype.maxHeight; m_NoiseSeed = prototype.noiseSeed; m_NoiseSpread = prototype.noiseSpread; m_DetailDensity = prototype.density; m_HoleEdgePadding = Mathf.Clamp01(prototype.holeEdgePadding) * 100.0f; m_HealthyColor = prototype.healthyColor; m_DryColor = prototype.dryColor; switch (prototype.renderMode) { case DetailRenderMode.GrassBillboard: Debug.LogError("Detail meshes can't be rendered as billboards"); m_RenderMode = TerrainDetailMeshRenderMode.Grass; break; case DetailRenderMode.Grass: m_RenderMode = TerrainDetailMeshRenderMode.Grass; break; case DetailRenderMode.VertexLit: m_RenderMode = TerrainDetailMeshRenderMode.VertexLit; break; } m_UseInstancing = prototype.useInstancing; m_UseDensityScaling = prototype.useDensityScaling; m_AlignToGround = Mathf.Clamp01(prototype.alignToGround) * 100.0f; m_PositionOrderliness = Mathf.Clamp01(prototype.positionOrderliness) * 100.0f; m_TargetCoverage = prototype.targetCoverage; OnWizardUpdate(); }
protected override bool DrawWizardGUI() { EditorGUI.BeginChangeCheck(); m_DetailPrefab = EditorGUILayout.ObjectField("Detail Prefab", m_DetailPrefab, typeof(GameObject), !TerrainDataIsPersistent) as GameObject; GUI.enabled = terrainData.detailScatterMode == DetailScatterMode.CoverageMode; m_DetailDensity = EditorGUILayout.Slider(DetailWizardSharedStyles.Instance.detailDensity, m_DetailDensity, 0, 3); GUI.enabled = true; m_AlignToGround = EditorGUILayout.Slider(DetailWizardSharedStyles.Instance.alignToGround, m_AlignToGround, 0, 100); m_PositionOrderliness = EditorGUILayout.Slider(DetailWizardSharedStyles.Instance.positionOrderliness, m_PositionOrderliness, 0, 100); m_MinWidth = EditorGUILayout.FloatField("Min Width", m_MinWidth); m_MaxWidth = EditorGUILayout.FloatField("Max Width", m_MaxWidth); m_MinHeight = EditorGUILayout.FloatField("Min Height", m_MinHeight); m_MaxHeight = EditorGUILayout.FloatField("Max Height", m_MaxHeight); m_NoiseSeed = EditorGUILayout.IntField(DetailWizardSharedStyles.Instance.noiseSeed, m_NoiseSeed); m_NoiseSpread = EditorGUILayout.FloatField(DetailWizardSharedStyles.Instance.noiseSpread, m_NoiseSpread); m_HoleEdgePadding = EditorGUILayout.Slider(DetailWizardSharedStyles.Instance.holeEdgePadding, m_HoleEdgePadding, 0, 100); GUI.enabled = terrainData.detailScatterMode == DetailScatterMode.CoverageMode; m_DetailDensity = EditorGUILayout.Slider(DetailWizardSharedStyles.Instance.detailDensity, m_DetailDensity, 0, 5); GUI.enabled = true; if (!m_UseInstancing) { m_HealthyColor = EditorGUILayout.ColorField("Healthy Color", m_HealthyColor); m_DryColor = EditorGUILayout.ColorField("Dry Color", m_DryColor); } if (m_UseInstancing) { EditorGUI.BeginDisabled(true); EditorGUILayout.EnumPopup("Render Mode", TerrainDetailMeshRenderMode.VertexLit); EditorGUI.EndDisabled(); } else { m_RenderMode = (TerrainDetailMeshRenderMode)EditorGUILayout.EnumPopup("Render Mode", m_RenderMode); } m_UseInstancing = EditorGUILayout.Toggle("Use GPU Instancing", m_UseInstancing); if (m_UseInstancing) { EditorGUILayout.HelpBox("Using GPU Instancing would enable using the Material you set on the prefab.", MessageType.Info); } m_UseDensityScaling = EditorGUILayout.Toggle(DetailWizardSharedStyles.Instance.useDensityScaling, m_UseDensityScaling); if (!DetailPrototype.IsModeSupportedByRenderPipeline(ComputeRenderMode(), m_UseInstancing, out var message)) { EditorGUILayout.LabelField(EditorGUIUtility.TempContent(message, EditorGUIUtility.GetHelpIcon(MessageType.Error)), DetailWizardSharedStyles.Instance.helpBoxBig); } return(EditorGUI.EndChangeCheck()); }