GerstnerDisplaceEditor.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using UnityEngine;
  2. using System;
  3. using UnityEditor;
  4. namespace UnityStandardAssets.Water
  5. {
  6. [CustomEditor(typeof(GerstnerDisplace))]
  7. public class GerstnerDisplaceEditor : Editor
  8. {
  9. private SerializedObject serObj;
  10. public void OnEnable()
  11. {
  12. serObj = new SerializedObject(target);
  13. }
  14. public override void OnInspectorGUI()
  15. {
  16. serObj.Update();
  17. GameObject go = ((GerstnerDisplace)serObj.targetObject).gameObject;
  18. WaterBase wb = (WaterBase)go.GetComponent(typeof(WaterBase));
  19. Material sharedWaterMaterial = wb.sharedMaterial;
  20. GUILayout.Label("Animates vertices using up 4 generated waves", EditorStyles.miniBoldLabel);
  21. if (sharedWaterMaterial)
  22. {
  23. Vector4 amplitude = WaterEditorUtility.GetMaterialVector("_GAmplitude", sharedWaterMaterial);
  24. Vector4 frequency = WaterEditorUtility.GetMaterialVector("_GFrequency", sharedWaterMaterial);
  25. Vector4 steepness = WaterEditorUtility.GetMaterialVector("_GSteepness", sharedWaterMaterial);
  26. Vector4 speed = WaterEditorUtility.GetMaterialVector("_GSpeed", sharedWaterMaterial);
  27. Vector4 directionAB = WaterEditorUtility.GetMaterialVector("_GDirectionAB", sharedWaterMaterial);
  28. Vector4 directionCD = WaterEditorUtility.GetMaterialVector("_GDirectionCD", sharedWaterMaterial);
  29. amplitude = EditorGUILayout.Vector4Field("Amplitude (Height offset)", amplitude);
  30. frequency = EditorGUILayout.Vector4Field("Frequency (Tiling)", frequency);
  31. steepness = EditorGUILayout.Vector4Field("Steepness", steepness);
  32. speed = EditorGUILayout.Vector4Field("Speed", speed);
  33. directionAB = EditorGUILayout.Vector4Field("Direction scale (Wave 1 (X,Y) and 2 (Z,W))", directionAB);
  34. directionCD = EditorGUILayout.Vector4Field("Direction scale (Wave 3 (X,Y) and 4 (Z,W))", directionCD);
  35. if (GUI.changed)
  36. {
  37. WaterEditorUtility.SetMaterialVector("_GAmplitude", amplitude, sharedWaterMaterial);
  38. WaterEditorUtility.SetMaterialVector("_GFrequency", frequency, sharedWaterMaterial);
  39. WaterEditorUtility.SetMaterialVector("_GSteepness", steepness, sharedWaterMaterial);
  40. WaterEditorUtility.SetMaterialVector("_GSpeed", speed, sharedWaterMaterial);
  41. WaterEditorUtility.SetMaterialVector("_GDirectionAB", directionAB, sharedWaterMaterial);
  42. WaterEditorUtility.SetMaterialVector("_GDirectionCD", directionCD, sharedWaterMaterial);
  43. }
  44. /*
  45. Vector4 animationTiling = WaterEditorUtility.GetMaterialVector("_AnimationTiling", sharedWaterMaterial);
  46. Vector4 animationDirection = WaterEditorUtility.GetMaterialVector("_AnimationDirection", sharedWaterMaterial);
  47. float firstTilingU = animationTiling.x*100.0F;
  48. float firstTilingV = animationTiling.y*100.0F;
  49. float firstDirectionU = animationDirection.x;
  50. float firstDirectionV = animationDirection.y;
  51. float secondTilingU = animationTiling.z*100.0F;
  52. float secondTilingV = animationTiling.w*100.0F;
  53. float secondDirectionU = animationDirection.z;
  54. float secondDirectionV = animationDirection.w;
  55. EditorGUILayout.BeginHorizontal ();
  56. firstTilingU = EditorGUILayout.FloatField("First Tiling U", firstTilingU);
  57. firstTilingV = EditorGUILayout.FloatField("First Tiling V", firstTilingV);
  58. EditorGUILayout.EndHorizontal ();
  59. EditorGUILayout.BeginHorizontal ();
  60. secondTilingU = EditorGUILayout.FloatField("Second Tiling U", secondTilingU);
  61. secondTilingV = EditorGUILayout.FloatField("Second Tiling V", secondTilingV);
  62. EditorGUILayout.EndHorizontal ();
  63. EditorGUILayout.BeginHorizontal ();
  64. firstDirectionU = EditorGUILayout.FloatField("1st Animation U", firstDirectionU);
  65. firstDirectionV = EditorGUILayout.FloatField("1st Animation V", firstDirectionV);
  66. EditorGUILayout.EndHorizontal ();
  67. EditorGUILayout.BeginHorizontal ();
  68. secondDirectionU = EditorGUILayout.FloatField("2nd Animation U", secondDirectionU);
  69. secondDirectionV = EditorGUILayout.FloatField("2nd Animation V", secondDirectionV);
  70. EditorGUILayout.EndHorizontal ();
  71. animationDirection = new Vector4(firstDirectionU,firstDirectionV, secondDirectionU,secondDirectionV);
  72. animationTiling = new Vector4(firstTilingU/100.0F,firstTilingV/100.0F, secondTilingU/100.0F,secondTilingV/100.0F);
  73. WaterEditorUtility.SetMaterialVector("_AnimationTiling", animationTiling, sharedWaterMaterial);
  74. WaterEditorUtility.SetMaterialVector("_AnimationDirection", animationDirection, sharedWaterMaterial);
  75. EditorGUILayout.Separator ();
  76. GUILayout.Label ("Displacement Strength", EditorStyles.boldLabel);
  77. float heightDisplacement = WaterEditorUtility.GetMaterialFloat("_HeightDisplacement", sharedWaterMaterial);
  78. heightDisplacement = EditorGUILayout.Slider("Height", heightDisplacement, 0.0F, 5.0F);
  79. WaterEditorUtility.SetMaterialFloat("_HeightDisplacement", heightDisplacement, sharedWaterMaterial);
  80. */
  81. }
  82. serObj.ApplyModifiedProperties();
  83. }
  84. }
  85. }