public override void OnInspectorGUI() { UltimateToonWater UTW = (UltimateToonWater)target; bool needGenerateMesh = false; bool needUpdateTextures = false; bool needUpdateColors = false; bool needUpdateTextureSize = false; bool needUpdateTextureProps = false; bPreviewMode.boolValue = GUILayout.Toggle(bPreviewMode.boolValue, "Preview water in editor."); openSetup = EditorGUILayout.Foldout(openSetup, "Setup:"); if (openSetup == true) { bUseGPU.boolValue = EditorGUILayout.Toggle("Use GPU rendering:", bUseGPU.boolValue); if (bUseGPU.boolValue == false) { EditorGUILayout.HelpBox("Always use GPU rendering if possible.\nThis is much faster!", MessageType.Warning); } bMoveMesh.boolValue = EditorGUILayout.Toggle("Generate Waves:", bMoveMesh.boolValue); bMoveTextures.boolValue = EditorGUILayout.Toggle("Move Textures:", bMoveTextures.boolValue); bStickToTarget.boolValue = EditorGUILayout.Toggle("Snap to Target:", bStickToTarget.boolValue); if (bStickToTarget.boolValue == true) { tTarget.objectReferenceValue = EditorGUILayout.ObjectField("Target:", tTarget.objectReferenceValue, typeof(Transform), true); } GUILayout.Label("* = Optional setting, can be left empty."); } openBasic = EditorGUILayout.Foldout(openBasic, "Basic settings:"); if (openBasic == true) { float fSizeOld = fSize.floatValue; float fMeshPointDistanceOld = fMeshPointDistance.floatValue; fSize.floatValue = EditorGUILayout.FloatField("Square Water Size: ", fSize.floatValue); fMeshPointDistance.floatValue = EditorGUILayout.FloatField("Meshpoint Distance: ", fMeshPointDistance.floatValue); if (fSizeOld != fSize.floatValue || fMeshPointDistanceOld != fMeshPointDistance.floatValue) { needGenerateMesh = true; } } openAppearance = EditorGUILayout.Foldout(openAppearance, "Appearance:"); if (openAppearance == true) { Color cWaterColorNew = cWaterColor.colorValue; Color cWaveColorNew = cWaveColor.colorValue; cWaterColorNew = EditorGUILayout.ColorField("Water Color:", cWaterColorNew); cWaveColorNew = EditorGUILayout.ColorField("Wave Color:", cWaveColorNew); cWaterColorNew.a = EditorGUILayout.Slider("Water transparency:", cWaterColorNew.a, 0f, 1f); if (cWaterColorNew != cWaterColor.colorValue || cWaveColorNew != cWaveColor.colorValue) { cWaterColor.colorValue = cWaterColorNew; cWaveColor.colorValue = cWaveColorNew; needUpdateColors = true; } float fColorTextureRatioOld = fColorTextureRatio.floatValue; float fHeightColoringOld = fHeightColoring.floatValue; float fShoreFoamLineOld = fShoreFoamLine.floatValue; float fShoreFoamCutOld = fShoreFoamCut.floatValue; float fTextureBiasOld = fTextureBias.floatValue; fColorTextureRatio.floatValue = EditorGUILayout.Slider("Color/Texture ratio:", fColorTextureRatio.floatValue, 0f, 1f); fTextureBias.floatValue = EditorGUILayout.Slider("Texture mix:", fTextureBias.floatValue, 0f, 1f); fHeightColoring.floatValue = EditorGUILayout.Slider("Steepness coloring:", fHeightColoring.floatValue, 0f, 1f); fShoreFoamLine.floatValue = EditorGUILayout.FloatField("Shore foam amount:", fShoreFoamLine.floatValue); fShoreFoamCut.floatValue = EditorGUILayout.Slider("Shoe foam cut:", fShoreFoamCut.floatValue, 0f, 1f); if (fColorTextureRatio.floatValue != fColorTextureRatioOld || fTextureBias.floatValue != fTextureBiasOld || fHeightColoring.floatValue != fHeightColoringOld || fShoreFoamLine.floatValue != fShoreFoamLineOld || fShoreFoamCut.floatValue != fShoreFoamCutOld ) { needUpdateTextureProps = true; } Object tMainTextureOld = tMainTexture.objectReferenceValue; Object tDetailTextureOld = tDetailTexture.objectReferenceValue; tMainTexture.objectReferenceValue = EditorGUILayout.ObjectField("Main Texture:", tMainTexture.objectReferenceValue, typeof(Texture2D), false); tDetailTexture.objectReferenceValue = EditorGUILayout.ObjectField("Detail Texture:", tDetailTexture.objectReferenceValue, typeof(Texture2D), false); if (tMainTexture.objectReferenceValue != tMainTextureOld || tDetailTexture.objectReferenceValue != tDetailTextureOld) { needUpdateTextures = true; } Vector2 v2MainTextureTitleOld = v2MainTextureTitle.vector2Value; Vector2 v2DetailTextureTitleOld = v2DetailTextureTitle.vector2Value; Vector2 v2MainTexturScrollOld = v2MainTexturScroll.vector2Value; Vector2 v2DetailTexturScrollOld = v2DetailTexturScroll.vector2Value; v2MainTextureTitle.vector2Value = EditorGUILayout.Vector2Field("Main Texture Size:", v2MainTextureTitle.vector2Value); v2DetailTextureTitle.vector2Value = EditorGUILayout.Vector2Field("Detail Texture Size:", v2DetailTextureTitle.vector2Value); v2MainTexturScroll.vector2Value = EditorGUILayout.Vector2Field("Main Texture Scroll:", v2MainTexturScroll.vector2Value); v2DetailTexturScroll.vector2Value = EditorGUILayout.Vector2Field("Detail Texture Scroll:", v2DetailTexturScroll.vector2Value); if (v2MainTextureTitle.vector2Value != v2MainTextureTitleOld || v2DetailTextureTitle.vector2Value != v2DetailTextureTitleOld || v2MainTexturScroll.vector2Value != v2MainTexturScrollOld || v2DetailTexturScroll.vector2Value != v2DetailTexturScrollOld) { needUpdateTextureSize = true; } } openWaves = EditorGUILayout.Foldout(openWaves, "Waves:"); if (openWaves == true) { //GUILayout.Label("Warning!: If more than 2 waves are used,\nCPU rendering will be enabled.\nThis is much slower than GPU rendering.",warningStyle); if (UTW.waveForms.Count > 2) { EditorGUILayout.HelpBox("If more than 2 waves are used,\nCPU rendering will be enabled.\nThis is much slower than GPU rendering.", MessageType.Warning); } EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(aWaveForms, true); if (EditorGUI.EndChangeCheck()) { serializedObject.ApplyModifiedProperties(); } EditorGUIUtility.LookLikeControls(); } showDefaultInspectorOptions = EditorGUILayout.Foldout(showDefaultInspectorOptions, "Default Inspector:"); if (showDefaultInspectorOptions == true) { EditorGUILayout.HelpBox("Only edit if you understand the functioning of the script!", MessageType.Warning); DrawDefaultInspector(); } dimObj.ApplyModifiedProperties(); if (needGenerateMesh == true) { int numVerts = (int)(fSize.floatValue / fMeshPointDistance.floatValue); numVerts *= numVerts; if (numVerts > 65000) { fMeshPointDistance.floatValue = Mathf.CeilToInt(fSize.floatValue / Mathf.Sqrt(65000f)); dimObj.ApplyModifiedProperties(); } UTW.generateMesh(); } if (needUpdateTextures == true) { UTW.UpdateTextures(); } if (needUpdateColors == true) { UTW.UpdateColor(); } if (needUpdateTextureSize == true) { UTW.UpdateTextureSize(); } if (needUpdateTextureProps == true) { UTW.UpdateTextureProps(); } }
void ShowControls(int id) { bool needGenerateMesh = false; GUILayout.BeginVertical(); if (GUILayout.Button("Toggle Particles")) { if (waveParticles != null) { waveParticles.gameObject.SetActive(!waveParticles.gameObject.activeSelf); } if (floaterParticles != null) { floaterParticles.gameObject.SetActive(!floaterParticles.gameObject.activeSelf); } } if (island != null) { GUILayout.BeginHorizontal(); GUILayout.Label("Island Y:", GUILayout.Width(100)); float islandHeight = GUILayout.HorizontalSlider(island.position.y, -50, -10); island.position = new Vector3(island.position.x, islandHeight, island.position.z); GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(); float startSize = UTW.size; GUILayout.Label("Water Size (" + startSize + "):", GUILayout.Width(100)); UTW.size = Mathf.RoundToInt(GUILayout.HorizontalSlider(startSize, 100, 2000)); if (UTW.size != startSize) { needGenerateMesh = true; } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); float startMPD = UTW.meshPointDistance; GUILayout.Label("MeshPoint Distance (" + startMPD + "):", GUILayout.Width(100)); UTW.meshPointDistance = GUILayout.HorizontalSlider(startMPD, 1, 20); if (UTW.meshPointDistance != startMPD) { needGenerateMesh = true; } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); Color color = UTW.GetComponent <Renderer>().material.GetColor("_Color"); string colorString = color.ToString(); GUILayout.Label("Base Color:", GUILayout.Width(100)); GUILayout.BeginVertical(); color.r = GUILayout.HorizontalSlider(color.r, 0f, 1f); color.g = GUILayout.HorizontalSlider(color.g, 0f, 1f); color.b = GUILayout.HorizontalSlider(color.b, 0f, 1f); GUILayout.EndVertical(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Water Alpha:", GUILayout.Width(100)); color.a = GUILayout.HorizontalSlider(color.a, 0f, 1f); if (colorString != color.ToString()) { UTW.GetComponent <Renderer>().material.SetColor("_Color", color); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); float startTC = UTW.GetComponent <Renderer>().material.GetFloat("_ColorBias"); float cloneTC = startTC; GUILayout.Label("Texture/Color:", GUILayout.Width(100)); startTC = GUILayout.HorizontalSlider(startTC, 0f, 1f); if (cloneTC != startTC) { UTW.GetComponent <Renderer>().material.SetFloat("_ColorBias", startTC); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); float startTT = UTW.GetComponent <Renderer>().material.GetFloat("_TextureBias"); float cloneTT = startTT; GUILayout.Label("Texture/Texture:", GUILayout.Width(100)); startTT = GUILayout.HorizontalSlider(startTT, 0f, 1f); if (cloneTT != startTT) { UTW.GetComponent <Renderer>().material.SetFloat("_TextureBias", startTT); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); float startT1S = UTW.mainTextureTitle.x; GUILayout.Label("Texture1 Size:", GUILayout.Width(100)); startT1S = GUILayout.HorizontalSlider(startT1S, 1f, 1200); if (startT1S != UTW.mainTextureTitle.x) { UTW.mainTextureTitle = new Vector2(startT1S, startT1S); UTW.UpdateTextureSize(); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Texture1 Scroll:", GUILayout.Width(100)); GUILayout.BeginVertical(); //mainTexturScroll Vector2 scroll = UTW.mainTexturScroll; scroll.x = GUILayout.HorizontalSlider(scroll.x, -1f, 1f); scroll.y = GUILayout.HorizontalSlider(scroll.y, -1f, 1f); UTW.mainTexturScroll = scroll; GUILayout.EndVertical(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); float startT2S = UTW.detailTextureTitle.x; GUILayout.Label("Texture2 Size:", GUILayout.Width(100)); startT2S = GUILayout.HorizontalSlider(startT2S, 1f, 100); if (startT2S != UTW.detailTextureTitle.x) { UTW.detailTextureTitle = new Vector2(startT2S, startT2S); UTW.UpdateTextureSize(); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Texture2 Scroll:", GUILayout.Width(100)); GUILayout.BeginVertical(); //mainTexturScroll Vector2 scroll2 = UTW.detailTexturScroll; scroll2.x = GUILayout.HorizontalSlider(scroll2.x, -1f, 1f); scroll2.y = GUILayout.HorizontalSlider(scroll2.y, -1f, 1f); UTW.detailTexturScroll = scroll2; GUILayout.EndVertical(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); float startHF = UTW.GetComponent <Renderer>().material.GetFloat("_HeightFactor"); float cloneHF = startHF; GUILayout.Label("Height Coloring:", GUILayout.Width(100)); startHF = GUILayout.HorizontalSlider(startHF, 0f, 0.5f); if (cloneHF != startHF) { UTW.GetComponent <Renderer>().material.SetFloat("_HeightFactor", startHF); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); float startSD = UTW.GetComponent <Renderer>().material.GetFloat("_HighlightThresholdMax"); float cloneSD = startSD; GUILayout.Label("Shore Foam:", GUILayout.Width(100)); startSD = GUILayout.HorizontalSlider(startSD, 0f, 10f); if (cloneSD != startSD) { UTW.GetComponent <Renderer>().material.SetFloat("_HighlightThresholdMax", startSD); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); Color color2 = UTW.GetComponent <Renderer>().material.GetColor("_Color2"); string color2String = color2.ToString(); GUILayout.Label("Shore Foam Color:", GUILayout.Width(100)); GUILayout.BeginVertical(); color2.r = GUILayout.HorizontalSlider(color2.r, 0f, 1f); color2.g = GUILayout.HorizontalSlider(color2.g, 0f, 1f); color2.b = GUILayout.HorizontalSlider(color2.b, 0f, 1f); if (color2String != color2.ToString()) { UTW.GetComponent <Renderer>().material.SetColor("_Color2", color2); } GUILayout.EndVertical(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); float startSDC = UTW.GetComponent <Renderer>().material.GetFloat("_HighlightThresholdRange"); float cloneSDC = startSDC; GUILayout.Label("Shore Foam Cut:", GUILayout.Width(100)); startSDC = GUILayout.HorizontalSlider(startSDC, 0f, 1f); if (cloneSDC != startSDC) { UTW.GetComponent <Renderer>().material.SetFloat("_HighlightThresholdRange", startSDC); } GUILayout.EndHorizontal(); GUILayout.EndVertical(); if (needGenerateMesh == true) { int numVerts = (int)(UTW.size / UTW.meshPointDistance); numVerts *= numVerts; if (numVerts > 65000) { UTW.meshPointDistance = Mathf.CeilToInt(UTW.size / Mathf.Sqrt(65000f)); } UTW.generateMesh(); } }