Search Unity

Performance drops with Custom Editor

Discussion in 'Immediate Mode GUI (IMGUI)' started by AntonioClavain, Oct 20, 2017.

  1. AntonioClavain

    AntonioClavain

    Joined:
    Jul 3, 2017
    Posts:
    1
    Hello,

    I have a Custom Editor and as soon as I select the object in the inspector with this custom editor the performance goes slower. Am I doing something wrong or that I could improve on some way? Is a custom editor that much slower?

    Thanks! :)

    Code (CSharp):
    1. [CustomEditor(typeof(CameraManager))]
    2.     public class CameraManagerEditor : Editor
    3.     {
    4.         // Basic properties
    5.         private SerializedProperty _basicOffsetDistance;
    6.         private SerializedProperty _basicOffsetHeight;
    7.         private SerializedProperty _basicLookAtOffsetDistance;
    8.         private SerializedProperty _basicLookAtOffsetHeight;
    9.  
    10.         // Spring properties
    11.         private SerializedProperty _springEnabled;
    12.         private SerializedProperty _springHorizontalOffset;
    13.         private SerializedProperty _springVerticalOffset;
    14.         private SerializedProperty _springSpeed;
    15.         private SerializedProperty _springBreakFactor;
    16.         private SerializedProperty _springInertialFactor;
    17.         private SerializedProperty _springFOVOffset;
    18.         private SerializedProperty _springMaximumTime;
    19.  
    20.         // Slope properties
    21.         private SerializedProperty _slopeEnabled;
    22.         private SerializedProperty _slopeVerticalOffset;
    23.         private SerializedProperty _slopeVerticalLookAtOffset;
    24.         private SerializedProperty _slopePositiveOffsetFactor;
    25.         private SerializedProperty _slopeNegativeOffsetFactor;
    26.         private SerializedProperty _slopeLookAtFactor;
    27.         private SerializedProperty _slopeSpeedUp;
    28.         private SerializedProperty _slopeSpeedDown;
    29.         private SerializedProperty _slopeSpeedBack;
    30.         private SerializedProperty _slopeMaxAngle;
    31.  
    32.         // Sway properties
    33.         private SerializedProperty _swayEnabled;
    34.         private SerializedProperty _swayMaxAngle;
    35.         private SerializedProperty _swaySpeed;
    36.         private SerializedProperty _swayTurnMaxAngle;
    37.         private SerializedProperty _swayTurnSpeed;
    38.         private SerializedProperty _swayDriftMaxAngle;
    39.         private SerializedProperty _swayDriftSpeed;
    40.  
    41.         // Drift properties
    42.         private SerializedProperty _driftEnabled;
    43.         private SerializedProperty _driftRadius;
    44.         private SerializedProperty _driftMaxAngle;
    45.         private SerializedProperty _driftForwardFactor;
    46.         private SerializedProperty _driftLateralFactor;
    47.         private SerializedProperty _driftLookAtFactor;
    48.         private SerializedProperty _driftAcceleration;
    49.         private SerializedProperty _driftSpeedBack;
    50.  
    51.         // Bounce properties
    52.         private SerializedProperty _bounceEnabled;
    53.         private SerializedProperty _bounceAmplitude;
    54.         private SerializedProperty _bounceMaxTimeOnAir;
    55.         private SerializedProperty _bounceMaxTimeBouncing;
    56.         private SerializedProperty _bounceFrequency;
    57.  
    58.         // Turbo properties
    59.         private SerializedProperty _turboEnabled;
    60.         private SerializedProperty _turboAmplitude;
    61.  
    62.         public void OnEnable()
    63.         {
    64.             _basicOffsetDistance = serializedObject.FindProperty("basicOffsetDistance");
    65.             _basicOffsetHeight = serializedObject.FindProperty("basicOffsetHeight");
    66.             _basicLookAtOffsetDistance = serializedObject.FindProperty("basicLookAtOffsetDistance");
    67.             _basicLookAtOffsetHeight = serializedObject.FindProperty("basicLookAtOffsetHeight");
    68.  
    69.             _springEnabled = serializedObject.FindProperty("springEnabled");
    70.             _springHorizontalOffset = serializedObject.FindProperty("springHorizontalOffset");
    71.             _springVerticalOffset = serializedObject.FindProperty("springVerticalOffset");
    72.             _springSpeed = serializedObject.FindProperty("springSpeed");
    73.             _springBreakFactor = serializedObject.FindProperty("springBreakFactor");
    74.             _springInertialFactor = serializedObject.FindProperty("springInertialFactor");
    75.             _springFOVOffset = serializedObject.FindProperty("springFOVOffset");
    76.             _springMaximumTime = serializedObject.FindProperty("springMaximumTime");
    77.  
    78.             _slopeEnabled = serializedObject.FindProperty("slopeEnabled");
    79.             _slopeVerticalOffset = serializedObject.FindProperty("slopeVerticalOffset");
    80.             _slopeVerticalLookAtOffset = serializedObject.FindProperty("slopeVerticalLookAtOffset");
    81.             _slopePositiveOffsetFactor = serializedObject.FindProperty("slopePositiveOffsetFactor");
    82.             _slopeNegativeOffsetFactor = serializedObject.FindProperty("slopeNegativeOffsetFactor");
    83.             _slopeLookAtFactor = serializedObject.FindProperty("slopeLookAtFactor");
    84.             _slopeSpeedUp = serializedObject.FindProperty("slopeSpeedUp");
    85.             _slopeSpeedDown = serializedObject.FindProperty("slopeSpeedDown");
    86.             _slopeSpeedBack = serializedObject.FindProperty("slopeSpeedBack");
    87.             _slopeMaxAngle = serializedObject.FindProperty("slopeMaxAngle");
    88.  
    89.             _swayEnabled = serializedObject.FindProperty("swayEnabled");
    90.             _swayMaxAngle = serializedObject.FindProperty("swayMaxAngle");
    91.             _swaySpeed = serializedObject.FindProperty("swaySpeed");
    92.             _swayTurnMaxAngle = serializedObject.FindProperty("swayTurnMaxAngle");
    93.             _swayTurnSpeed = serializedObject.FindProperty("swayTurnSpeed");
    94.             _swayDriftMaxAngle = serializedObject.FindProperty("swayDriftMaxAngle");
    95.             _swayDriftSpeed = serializedObject.FindProperty("swayDriftSpeed");
    96.  
    97.             _driftEnabled = serializedObject.FindProperty("driftEnabled");
    98.             _driftRadius = serializedObject.FindProperty("driftRadius");
    99.             _driftMaxAngle = serializedObject.FindProperty("driftMaxAngle");
    100.             _driftForwardFactor = serializedObject.FindProperty("driftForwardFactor");
    101.             _driftLateralFactor = serializedObject.FindProperty("driftLateralFactor");
    102.             _driftLookAtFactor = serializedObject.FindProperty("driftLookAtFactor");
    103.             _driftAcceleration = serializedObject.FindProperty("driftAcceleration");
    104.             _driftSpeedBack = serializedObject.FindProperty("driftSpeedBack");
    105.  
    106.             _bounceEnabled = serializedObject.FindProperty("bounceEnabled");
    107.             _bounceAmplitude = serializedObject.FindProperty("bounceAmplitude");
    108.             _bounceFrequency = serializedObject.FindProperty("bounceFrequency");
    109.             _bounceMaxTimeBouncing = serializedObject.FindProperty("bounceMaxTimeBouncing");
    110.             _bounceMaxTimeOnAir = serializedObject.FindProperty("bounceMaxTimeOnAir");
    111.  
    112.             _turboEnabled = serializedObject.FindProperty("turboEnabled");
    113.             _turboAmplitude = serializedObject.FindProperty("turboAmplitude");
    114.         }
    115.        
    116.         override public void OnInspectorGUI()
    117.         {
    118.             EditorGUI.BeginChangeCheck();
    119.  
    120.             DrawDefaultInspector();
    121.  
    122.             CameraManager cameraManager = (CameraManager)target;
    123.  
    124.             base.serializedObject.Update();
    125.  
    126.             if (GUILayout.Button("Reload setup"))
    127.             {
    128.                 cameraManager.ReloadSetup();
    129.             }
    130.  
    131.             EditorGUILayout.PropertyField(_basicOffsetDistance);
    132.             EditorGUILayout.PropertyField(_basicOffsetHeight);
    133.             EditorGUILayout.PropertyField(_basicLookAtOffsetDistance);
    134.             EditorGUILayout.PropertyField(_basicLookAtOffsetHeight);
    135.  
    136.             EditorGUILayout.PropertyField(_springEnabled);
    137.  
    138.             if (_springEnabled.boolValue)
    139.             {
    140.                 EditorGUILayout.PropertyField(_springHorizontalOffset);
    141.                 EditorGUILayout.PropertyField(_springVerticalOffset);
    142.                 EditorGUILayout.PropertyField(_springSpeed);
    143.                 EditorGUILayout.PropertyField(_springBreakFactor);
    144.                 EditorGUILayout.PropertyField(_springInertialFactor);
    145.                 EditorGUILayout.PropertyField(_springFOVOffset);
    146.                 EditorGUILayout.PropertyField(_springMaximumTime);
    147.             }
    148.  
    149.             EditorGUILayout.PropertyField(_slopeEnabled);
    150.             if (_slopeEnabled.boolValue)
    151.             {
    152.                 EditorGUILayout.PropertyField(_slopeVerticalOffset);
    153.                 EditorGUILayout.PropertyField(_slopeVerticalLookAtOffset);
    154.                 EditorGUILayout.PropertyField(_slopePositiveOffsetFactor);
    155.                 EditorGUILayout.PropertyField(_slopeNegativeOffsetFactor);
    156.                 EditorGUILayout.PropertyField(_slopeLookAtFactor);
    157.                 EditorGUILayout.PropertyField(_slopeSpeedUp);
    158.                 EditorGUILayout.PropertyField(_slopeSpeedDown);
    159.                 EditorGUILayout.PropertyField(_slopeSpeedBack);
    160.                 EditorGUILayout.PropertyField(_slopeMaxAngle);
    161.             }
    162.  
    163.             EditorGUILayout.PropertyField(_swayEnabled);
    164.             if (_swayEnabled.boolValue)
    165.             {
    166.                 EditorGUILayout.PropertyField(_swayMaxAngle);
    167.                 EditorGUILayout.PropertyField(_swaySpeed);
    168.                 EditorGUILayout.PropertyField(_swayTurnMaxAngle);
    169.                 EditorGUILayout.PropertyField(_swayTurnSpeed);
    170.                 EditorGUILayout.PropertyField(_swayDriftMaxAngle);
    171.                 EditorGUILayout.PropertyField(_swayDriftSpeed);
    172.             }
    173.  
    174.             EditorGUILayout.PropertyField(_driftEnabled);
    175.             if (_driftEnabled.boolValue)
    176.             {
    177.                 EditorGUILayout.PropertyField(_driftRadius);
    178.                 EditorGUILayout.PropertyField(_driftMaxAngle);
    179.                 EditorGUILayout.PropertyField(_driftForwardFactor);
    180.                 EditorGUILayout.PropertyField(_driftLateralFactor);
    181.                 EditorGUILayout.PropertyField(_driftLookAtFactor);
    182.                 EditorGUILayout.PropertyField(_driftAcceleration);
    183.                 EditorGUILayout.PropertyField(_driftSpeedBack);
    184.             }
    185.  
    186.             EditorGUILayout.PropertyField(_bounceEnabled);
    187.             if (_bounceEnabled.boolValue)
    188.             {
    189.                 EditorGUILayout.PropertyField(_bounceAmplitude);
    190.                 EditorGUILayout.PropertyField(_bounceFrequency);
    191.                 EditorGUILayout.PropertyField(_bounceMaxTimeBouncing);
    192.                 EditorGUILayout.PropertyField(_bounceMaxTimeOnAir);
    193.             }
    194.  
    195.             EditorGUILayout.PropertyField(_turboEnabled);
    196.  
    197.             if (_turboEnabled.boolValue)
    198.             {
    199.                 EditorGUILayout.PropertyField(_turboAmplitude);
    200.             }
    201.  
    202.             EditorGUILayout.Space();
    203.  
    204.             if (GUILayout.Button("Reload setup"))
    205.             {
    206.                 cameraManager.ReloadSetup();
    207.             }
    208.  
    209.             if (EditorGUI.EndChangeCheck())
    210.             {
    211.                 base.serializedObject.ApplyModifiedProperties();
    212.             }
    213.  
    214.         }
    215.  
    216.         public void OnDisable()
    217.         {
    218.         }
    219.  
    220.     }
     
  2. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,694
    I don't see any red flags.

    Are there any errors in the console? Maybe it's not able to find one of the properties, and it's spamming the console.

    Have you tried commenting out parts to narrow down the culprit?
     
  3. Peter77

    Peter77

    QA Jesus

    Joined:
    Jun 12, 2013
    Posts:
    6,609
    TonyLi likes this.