As a BP User, Character is one hell of monolith that is difficult to customize.
Even with C++ it’s - in my opinion - almost impossible. Most of the time it requires writing a new class and copying the relevant stuff from Character/MovementComponent to your own class.
I have following suggestions to make, regarding the Character and CharacterMovementComponent:
- NetworkedCharacterMovementComponent extends CharacterMovementComponent
- Decouple MovementMode from the Character and MovementComponent. Instead use an interface (MovementModeInterface) which provides the (in current CMC) Phys() function. When switching MovementModes, replace the current MovementMode-Object.
This way you can extend already existing MovementModes by inheriting them. Provide basic Modes (Walking,Falling,Swimming etc) like you do now (Default Land/Water Movement) but use class instead of ENUM
- Decouple The MovementComponent and Character, I only took a glimpse into both classes, but it surely is not necessary to bind the Character to the CharacterMovementComponent maybe get rid of the CharacterClass completely, everything should be managed by the MovementComponent
- I don’t know if it’s possible, but extract the Root Motion-Code and put it in it’s own Component
- There’s no Condition customization whether the Character switches to Swimming Mode. Either provide a overiddable function, or a threshold (How much of the Capsule has to be in Water)
I’d like to have some feedback and if there’s a future update regarding Character at all.