Bug :
The latest undo changes feature seems to have some bugs.
Create a new project with Unity 2021.3.13f1.
Download and install Third Person Controller 3.0.3.
bug 1:
1. Open Atlas prefab.
2. Close Atlas prefab.
3. Open Atlas prefab.
4. Modify any of the ability parameter in Inspector and undo.
Error:
MissingReferenceException: The object of type 'UltimateCharacterLocomotion' has been destroyed but you are still trying to access it.
Your script should either check if it is null or you should not destroy the object.
UnityEngine.Component.GetComponent[T] () (at <c399efc08928422d8828d74a2b19ffba>:0)
Opsive.UltimateCharacterController.Editor.Controls.Types.AttributeModifierControl.GetControl (Opsive.Shared.Editor.UIElements.Controls.Types.TypeControlBase+TypeControlInput input) (at Assets/Opsive/UltimateCharacterController/Editor/Controls/Types/AttributeModifierControl.cs:43)
Opsive.Shared.Editor.UIElements.Controls.Types.TypeControlBase.GetTypeControl (Opsive.Shared.Editor.UIElements.Controls.Types.TypeControlBase+TypeControlInput input) (at <d6915ce5d5da4c9c8c5c7f4b5a43c3af>:0)
Opsive.Shared.Editor.UIElements.FieldInspectorView.AddTypeControl (UnityEngine.Object unityObject, System.Object target, System.Reflection.FieldInfo field, UnityEditor.SerializedProperty serializedProperty, System.Int32 arrayIndex, System.Type type, System.String label, System.String tooltip, System.Boolean adjustLabelWidth, System.Object value, System.Boolean searchBaseTypes, System.Action`2[T1,T2] onAddElement, System.Func`2[T,TResult] onChangeEvent, System.Action onResizeEvent, System.Object userData) (at <d6915ce5d5da4c9c8c5c7f4b5a43c3af>:0)
Opsive.Shared.Editor.UIElements.FieldInspectorView.AddSingleField (Opsive.Shared.Editor.UIElements.FieldInspectorView+InspectorInput input) (at <d6915ce5d5da4c9c8c5c7f4b5a43c3af>:0)
Opsive.Shared.Editor.UIElements.FieldInspectorView.AddField (Opsive.Shared.Editor.UIElements.FieldInspectorView+InspectorInput input) (at <d6915ce5d5da4c9c8c5c7f4b5a43c3af>:0)
Opsive.Shared.Editor.UIElements.FieldInspectorView.AddField (UnityEngine.Object unityObject, System.Object target, System.Reflection.FieldInfo field, UnityEditor.SerializedProperty serializedProperty, System.Action`2[T1,T2] onAddElement, System.Action`1[T] onChangeEvent, System.Func`3[T1,T2,TResult] onValidateChange, System.Boolean searchBaseTypes, System.Action onResizeEvent, System.Boolean adjustLabelWidth, System.Collections.Generic.HashSet`1[T] ignoredFieldNames, System.Object userData) (at <d6915ce5d5da4c9c8c5c7f4b5a43c3af>:0)
Opsive.Shared.Editor.UIElements.FieldInspectorView.AddField (UnityEngine.Object unityObject, System.Object target, System.String fieldName, System.Action`2[T1,T2] onAddElement, System.Action`1[T] onChangeEvent, System.Func`3[T1,T2,TResult] onValidateChange, System.Boolean searchBaseTypes, System.Action onResizeEvent, System.Boolean adjustLabelWidth, System.Collections.Generic.HashSet`1[T] ignoredFieldNames, UnityEditor.SerializedProperty serializedProperty, System.Object userData) (at <d6915ce5d5da4c9c8c5c7f4b5a43c3af>:0)
Opsive.Shared.Editor.UIElements.FieldInspectorView.AddField (UnityEngine.Object unityObject, System.Object target, System.String fieldName, UnityEngine.UIElements.VisualElement container, System.Action`1[T] onChangeEvent, System.Func`3[T1,T2,TResult] onValidateChange, System.Boolean searchBaseTypes, System.Action onResizeEvent, System.Boolean adjustLabelWidth, System.Collections.Generic.HashSet`1[T] ignoredFieldNames, UnityEditor.SerializedProperty serializedProperty, System.Object userData) (at <d6915ce5d5da4c9c8c5c7f4b5a43c3af>:0)
Opsive.UltimateCharacterController.Editor.Controls.Types.AbilityDrawers.AbilityControlType.GetHeaderControl (UnityEngine.Object unityObject, System.Object target, System.Reflection.FieldInfo field, UnityEditor.SerializedProperty serializedProperty, System.Int32 arrayIndex, System.Type type, System.Object value, System.Func`2[T,TResult] onChangeEvent, System.Object userData) (at Assets/Opsive/UltimateCharacterController/Editor/Controls/AbilityDrawers/AbilityControl.cs:53)
Opsive.UltimateCharacterController.Editor.Controls.Types.StateObjectControlType.GetControl (Opsive.Shared.Editor.UIElements.Controls.Types.TypeControlBase+TypeControlInput input) (at Assets/Opsive/UltimateCharacterController/Editor/Controls/Types/StateObjectControl.cs:39)
Opsive.Shared.Editor.UIElements.Controls.Types.TypeControlBase.GetTypeControl (Opsive.Shared.Editor.UIElements.Controls.Types.TypeControlBase+TypeControlInput input) (at <d6915ce5d5da4c9c8c5c7f4b5a43c3af>:0)
Opsive.Shared.Editor.UIElements.FieldInspectorView.AddTypeControl (UnityEngine.Object unityObject, System.Object target, System.Reflection.FieldInfo field, UnityEditor.SerializedProperty serializedProperty, System.Int32 arrayIndex, System.Type type, System.String label, System.String tooltip, System.Boolean adjustLabelWidth, System.Object value, System.Boolean searchBaseTypes, System.Action`2[T1,T2] onAddElement, System.Func`2[T,TResult] onChangeEvent, System.Action onResizeEvent, System.Object userData) (at <d6915ce5d5da4c9c8c5c7f4b5a43c3af>:0)
Opsive.Shared.Editor.UIElements.FieldInspectorView.AddFields (UnityEngine.Object unityObject, System.Object target, Opsive.Shared.Utility.MemberVisibility visibility, System.Action`2[T1,T2] onAddElement, System.Action`1[T] onChangeEvent, System.Func`3[T1,T2,TResult] onValidateChange, UnityEditor.SerializedProperty serializedProperty, System.Boolean searchBaseTypes, System.Action onResizeEvent, System.Boolean adjustLabelWidth, System.Collections.Generic.HashSet`1[T] ignoredFieldNames, System.Object userData) (at <d6915ce5d5da4c9c8c5c7f4b5a43c3af>:0)
Opsive.Shared.Editor.UIElements.FieldInspectorView.AddFields (UnityEngine.Object unityObject, System.Object target, Opsive.Shared.Utility.MemberVisibility visibility, UnityEngine.UIElements.VisualElement container, System.Action`1[T] onChangeEvent, UnityEditor.SerializedProperty serializedProperty, System.Func`3[T1,T2,TResult] onValidateChange, System.Boolean searchBaseTypes, System.Action onResizeEvent, System.Boolean adjustLabelWidth, System.Collections.Generic.HashSet`1[T] ignoredFieldNames, System.Object userData) (at <d6915ce5d5da4c9c8c5c7f4b5a43c3af>:0)
Opsive.UltimateCharacterController.Editor.Inspectors.Character.UltimateCharacterLocomotionInspector.ShowAbility (System.Boolean abilities, System.Int32 index) (at Assets/Opsive/UltimateCharacterController/Editor/Inspectors/Character/UltimateCharacterLocomotionInspector.cs:638)
Opsive.UltimateCharacterController.Editor.Inspectors.Character.UltimateCharacterLocomotionInspector.<CreateInspectorGUI>b__30_0 () (at Assets/Opsive/UltimateCharacterController/Editor/Inspectors/Character/UltimateCharacterLocomotionInspector.cs:75)
UnityEditor.Undo.Internal_CallUndoRedoPerformed () (at <dc1a47a5816e4be7bc6817ee4d339e75>:0)
UnityEditor.EditorApplication:Internal_CallGlobalEventHandler()
bug 2:
Ability parameter visibility is not refreshed after undo.
bug 3:
1. Open Demo scene (or my test scene).
2. Enter play mode and find Atlas.
3. Modify any of the ability parameter in Inspector and undo.
Error:
NullReferenceException: Object reference not set to an instance of an object
Opsive.UltimateCharacterController.Character.Abilities.Fall.CanStartAbility () (at Assets/Opsive/UltimateCharacterController/Scripts/Character/Abilities/Fall.cs:58)
Opsive.UltimateCharacterController.Character.UltimateCharacterLocomotion.TryStartAbility (Opsive.UltimateCharacterController.Character.Abilities.Ability ability, System.Boolean ignorePriority, System.Boolean ignoreCanStartCheck) (at Assets/Opsive/UltimateCharacterController/Scripts/Character/UltimateCharacterLocomotion.cs:809)
Opsive.UltimateCharacterController.Character.UltimateCharacterLocomotion.UpdateAbilities (Opsive.UltimateCharacterController.Character.Abilities.Ability[] abilities) (at Assets/Opsive/UltimateCharacterController/Scripts/Character/UltimateCharacterLocomotion.cs:620)
Opsive.UltimateCharacterController.Character.UltimateCharacterLocomotion.UpdateCharacter () (at Assets/Opsive/UltimateCharacterController/Scripts/Character/UltimateCharacterLocomotion.cs:552)
Opsive.UltimateCharacterController.Character.CharacterLocomotion.Move (System.Single horizontalMovement, System.Single forwardMovement, System.Single deltaYawRotation) (at Assets/Opsive/UltimateCharacterController/Scripts/Character/CharacterLocomotion.cs:480)
Opsive.UltimateCharacterController.SimulationManager+CharacterComponents.Move () (at Assets/Opsive/UltimateCharacterController/Scripts/Game/SimulationManager.cs:55)
Opsive.UltimateCharacterController.SimulationManager.MoveCharacters () (at Assets/Opsive/UltimateCharacterController/Scripts/Game/SimulationManager.cs:259)
Opsive.UltimateCharacterController.SimulationManager.FixedUpdate () (at Assets/Opsive/UltimateCharacterController/Scripts/Game/SimulationManager.cs:228)
NullReferenceException: Object reference not set to an instance of an object
Opsive.UltimateCharacterController.Character.Abilities.Ability.CanInputStartAbility (Opsive.Shared.Input.IPlayerInput playerInput) (at Assets/Opsive/UltimateCharacterController/Scripts/Character/Abilities/Ability.cs:316)
Opsive.UltimateCharacterController.Character.UltimateCharacterLocomotionHandler.UpdateAbilityInput (Opsive.UltimateCharacterController.Character.Abilities.Ability[] abilities) (at Assets/Opsive/UltimateCharacterController/Scripts/Character/UltimateCharacterLocomotionHandler.cs:124)
Opsive.UltimateCharacterController.Character.UltimateCharacterLocomotionHandler.UpdateAbilityInput () (at Assets/Opsive/UltimateCharacterController/Scripts/Character/UltimateCharacterLocomotionHandler.cs:92)
Opsive.UltimateCharacterController.Character.UltimateCharacterLocomotionHandler.Update () (at Assets/Opsive/UltimateCharacterController/Scripts/Character/UltimateCharacterLocomotionHandler.cs:67)