CameraViewDistanceEditor.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEditor;
  5. [CustomEditor(typeof(CameraViewDistance))]
  6. public class CameraViewDistanceEditor : Editor
  7. {
  8. private SerializedProperty m_LayerCullSphericalSp;
  9. private SerializedProperty m_LayerCullDistancesSp;
  10. private Camera m_Camera;
  11. private void OnEnable() {
  12. m_LayerCullSphericalSp = serializedObject.FindProperty("m_LayerCullSpherical");
  13. m_LayerCullDistancesSp = serializedObject.FindProperty("m_LayerCullDistances");
  14. m_Camera = ((CameraViewDistance)target).GetComponent<Camera>();
  15. }
  16. public override void OnInspectorGUI()
  17. {
  18. serializedObject.Update();
  19. bool defaultEnabled = GUI.enabled;
  20. GUI.enabled = false;
  21. Editor.DrawPropertiesExcluding(serializedObject, "m_LayerCullSpherical", "m_LayerCullDistances" );
  22. GUI.enabled = defaultEnabled;
  23. EditorGUILayout.PropertyField(m_LayerCullSphericalSp, EditorGUIUtility.TrTextContent("视锥平面是否球形"));
  24. if (m_Camera)
  25. {
  26. int cullingMask = m_Camera.cullingMask;
  27. if (cullingMask != 0)
  28. {
  29. EditorGUILayout.LabelField("设置layer的最大显示距离", EditorStyles.boldLabel);
  30. EditorGUILayout.BeginVertical(EditorStyles.textArea);
  31. for (int i = 0; i < 32; i++)
  32. {
  33. SerializedProperty elementSp = m_LayerCullDistancesSp.GetArrayElementAtIndex(i);
  34. int mask = (1 << i);
  35. if ((cullingMask & mask) == mask)
  36. {
  37. if (elementSp.floatValue <= 0) elementSp.floatValue = m_Camera.farClipPlane;
  38. elementSp.floatValue = EditorGUILayout.Slider(LayerMask.LayerToName(i), elementSp.floatValue, m_Camera.nearClipPlane, m_Camera.farClipPlane);
  39. }
  40. else
  41. {
  42. elementSp.floatValue = 0f;
  43. }
  44. }
  45. EditorGUILayout.EndVertical();
  46. }
  47. }
  48. if (serializedObject.ApplyModifiedProperties())
  49. {
  50. ((CameraViewDistance)target).Refresh();
  51. }
  52. }
  53. }