void OnEnable()
        {
            m_Weight           = serializedObject.FindProperty("m_Weight");
            m_TwistNodesToggle = serializedObject.FindProperty("m_TwistNodesGUIToggle");

            var data = serializedObject.FindProperty("m_Data");

            m_Source     = data.FindPropertyRelative("m_Source");
            m_TwistAxis  = data.FindPropertyRelative("m_TwistAxis");
            m_TwistNodes = data.FindPropertyRelative("m_TwistNodes");

            m_Constraint      = (TwistCorrection)serializedObject.targetObject;
            m_TwistNodesArray = m_Constraint.data.twistNodes;

            var dataType  = m_Constraint.data.GetType();
            var fieldInfo = dataType.GetField("m_TwistNodes", BindingFlags.NonPublic | BindingFlags.Instance);
            var range     = fieldInfo.GetCustomAttribute <RangeAttribute>();

            if (m_TwistNodesArray.Count == 0)
            {
                m_TwistNodesArray.Add(WeightedTransform.Default(0f));
                m_Constraint.data.twistNodes = m_TwistNodesArray;
            }

            m_ReorderableList = WeightedTransformHelper.CreateReorderableList(m_TwistNodes, ref m_TwistNodesArray, range);

            m_ReorderableList.onChangedCallback = (ReorderableList reorderableList) =>
            {
                m_Constraint.data.twistNodes = (WeightedTransformArray)reorderableList.list;
            };
        }
        void OnEnable()
        {
            m_Weight           = serializedObject.FindProperty("m_Weight");
            m_TwistNodesToggle = serializedObject.FindProperty("m_TwistNodesGUIToggle");

            var data = serializedObject.FindProperty("m_Data");

            m_Source     = data.FindPropertyRelative("m_Source");
            m_TwistAxis  = data.FindPropertyRelative("m_TwistAxis");
            m_TwistNodes = data.FindPropertyRelative("m_TwistNodes");

            m_Constraint      = (TwistCorrection)serializedObject.targetObject;
            m_TwistNodesArray = m_Constraint.data.twistNodes;

            var dataType  = m_Constraint.data.GetType();
            var fieldInfo = dataType.GetField("m_TwistNodes", BindingFlags.NonPublic | BindingFlags.Instance);
            var range     = fieldInfo.GetCustomAttribute <RangeAttribute>();

            if (m_TwistNodesArray.Count == 0)
            {
                m_TwistNodesArray.Add(WeightedTransform.Default(0f));
                m_Constraint.data.twistNodes = m_TwistNodesArray;
            }

            m_ReorderableList = WeightedTransformHelper.CreateReorderableList(m_TwistNodes, ref m_TwistNodesArray, range);

            m_ReorderableList.onChangedCallback = (ReorderableList reorderableList) =>
            {
                Undo.RegisterCompleteObjectUndo(m_Constraint, "Edit TwistCorrection");
                m_Constraint.data.twistNodes = (WeightedTransformArray)reorderableList.list;
                if (PrefabUtility.IsPartOfPrefabInstance(m_Constraint))
                {
                    EditorUtility.SetDirty(m_Constraint);
                }
            };

            Undo.undoRedoPerformed += () =>
            {
                m_ReorderableList.list = m_Constraint.data.twistNodes;
            };
        }