tlaelgames
Sun, 15 Oct 2017 23:21:37 +0000
C++

NULL CharacterMovement component when switching from custom back to default

Build Type: Binary

Build Version: Version: 4.17.2-3658906+++UE4+Release-4.17

When using a custom CharacterMovementComponent for the ACharacter class, downgrading to a default CharacterMovementComponent later will break existing blueprints that use the character. After switcing up the constructor arguments and reloading the project, the character blueprints will have a NULL MovementComponent that can not be fixed (since it’s a private, inherited component).

Repro steps:

Start with ShooterGame template project

View the PlayerPawn blueprint in the editor and notice how it has a valid CharacterMovementComponent

Edit the source code for AShooterCharacter::AShooterCharacter:

Change this code:
AShooterCharacter::AShooterCharacter(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer.SetDefaultSubobjectClass(ACharacter::CharacterMovementComponentName))
{
To this:
AShooterCharacter::AShooterCharacter(const FObjectInitializer& ObjectInitializer)
{
This code change should make the ShooterCharacter use the standard UCharacterMovementComponent instead of the derived UShooterCharacterMovement

Compile the code and go back to the editor

View the PlayerPawn blueprint and notice that it still has a valid CharacterMovementComponent

Close the editor

Reopen the project in the editor

View the PlayerPawn blueprint – It doesn’t have a CharacterMovementComponent!

Run the game – It crashes due to NULL component

These constructor initializers also produce a NULL movement component:

: Super(ObjectInitializer)
: Super(ObjectInitializer.SetDefaultSubobjectClass(ACharacter::CharacterMovementComponentName))

Note that, while the PlayerPawn blueprint is in its bugged state, you can create a new blueprint that uses the ShooterCharacter as its parent. This new blueprint will have a valid, non-null movement component.

4 posts - 1 participant