Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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());
        }