private void GetStatesFromTransition(SerializedProperty _currentTransitions) { if (_currentTransitions == null || _currentTransitions.arraySize == 0) { return; } int amountOfTransitions = _currentTransitions.arraySize; for (int i = 0; i < amountOfTransitions; i++) { SerializedProperty nextStateProp = _currentTransitions.GetArrayElementAtIndex(i).FindPropertyRelative("m_nextState"); OTGCombatState nextState = (OTGCombatState)nextStateProp.objectReferenceValue; if (nextState != null && !AvailableStates.Contains(nextState)) { SerializedObject stateSOBJ = new SerializedObject(nextState); GetStatesFromTransition(stateSOBJ.FindProperty("m_stateTransitions")); AvailableStates.Add(nextState); } } }