I am trying to make a timeline using a curve I made to make the camera move back progressively while sprinting. It worked fine before I linked the timeline code to my sprint function but once I did every time I try to hit play, the engine will crash with this error.
Assertion failed: [File:D:/Build/++UE4/Sync/Engine/Source/Runtime/CoreUObject/Private/UObject/ScriptCore.cpp [Line: 1234] Failed to find function TimelineEnd in BP_PlayerCharacter_C /Game/ThirdPersonCPP/Maps/UEDPIE_0_ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.BP_PlayerCharacter_5
UE4Editor_Core
UE4Editor_Core
UE4Editor_Core
UE4Editor_Core
UE4Editor_CoreUObject
UE4Editor_Survival_7122!TBaseUFunctionDelegateInstance<ASurvivalCharacter,void __cdecl(void)>::TBaseUFunctionDelegateInstance<ASurvivalCharacter,void __cdecl(void)>() [c:\program files\epic games\ue_4.23\engine\source\runtime\core\public\delegates\delegateinstancesimpl.h:175]
UE4Editor_Survival_7122!ASurvivalCharacter::BeginPlay() [c:\users\jackh\documents\unreal projects\survival\source\survival\survivalcharacter.cpp:116]
UE4Editor_Engine
UE4Editor_Engine
UE4Editor_Engine
UE4Editor_Engine
UE4Editor_Engine
UE4Editor_UnrealEd
UE4Editor_UnrealEd
UE4Editor_UnrealEd
UE4Editor_UnrealEd
UE4Editor_UnrealEd
UE4Editor
UE4Editor
UE4Editor
UE4Editor
UE4Editor
kernel32
ntdll
I checked line 116 like it says in the error but I have no clue what the issue could be with that line in particular, here is my .cpp:
ASurvivalCharacter::ASurvivalCharacter() {
// Set size for collision capsule
GetCapsuleComponent()->InitCapsuleSize(42.f, 96.0f);
// set our turn rates for input
BaseTurnRate = 45.f;
BaseLookUpRate = 45.f;
// Don't rotate when the controller rotates. Let that just affect the camera.
bUseControllerRotationPitch = false;
bUseControllerRotationYaw = false;
bUseControllerRotationRoll = false;
// Configure character movement
GetCharacterMovement()->bOrientRotationToMovement = true; // Character moves in the direction of input...
GetCharacterMovement()->RotationRate = FRotator(0.0f, 540.0f, 0.0f); // ...at this rotation rate
GetCharacterMovement()->JumpZVelocity = 300.f;
GetCharacterMovement()->AirControl = 0.2f;
// Create a camera boom (pulls in towards the player if there is a collision)
CameraBoom = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraBoom"));
CameraBoom->SetupAttachment(RootComponent);
CameraBoom->TargetArmLength = 150.f; // The camera follows at this distance behind the character
CameraBoom->SocketOffset = (FVector(0, 60, 40)); //towards or away from player, left right of player, up down of player
CameraBoom->bUsePawnControlRotation = true; // Rotate the arm based on the controller
// Create a follow camera
FollowCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("FollowCamera"));
FollowCamera->SetupAttachment(CameraBoom, USpringArmComponent::SocketName); // Attach the camera to the end of the boom and let the boom adjust to match the controller orientation
FollowCamera->bUsePawnControlRotation = false; // Camera does not rotate relative to arm
// Note: The skeletal mesh and anim blueprint references on the Mesh component (inherited from Character)
// are set in the derived blueprint asset named MyCharacter (to avoid direct content references in C++)
PrimaryActorTick.bCanEverTick = true;
SprintMult = 2.f;
sprinting = false;
}
//////////////////////////////////////////////////////////////////////////
// Input
void ASurvivalCharacter::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) {
// Set up gameplay key bindings
check(PlayerInputComponent);
PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &ACharacter::Jump);
PlayerInputComponent->BindAction("Jump", IE_Released, this, &ACharacter::StopJumping);
PlayerInputComponent->BindAction("SwitchCamera", IE_Pressed, this, &ASurvivalCharacter::ChangeCamera);
PlayerInputComponent->BindAction("Sprint", IE_Pressed, this, &ASurvivalCharacter::Sprint);
PlayerInputComponent->BindAction("Sprint", IE_Released, this, &ASurvivalCharacter::StopSprint);
PlayerInputComponent->BindAxis("MoveForward", this, &ASurvivalCharacter::MoveForward);
PlayerInputComponent->BindAxis("MoveRight", this, &ASurvivalCharacter::MoveRight);
// We have 2 versions of the rotation bindings to handle different kinds of devices differently
// "turn" handles devices that provide an absolute delta, such as a mouse.
// "turnrate" is for devices that we choose to treat as a rate of change, such as an analog joystick
PlayerInputComponent->BindAxis("Turn", this, &APawn::AddControllerYawInput);
PlayerInputComponent->BindAxis("TurnRate", this, &ASurvivalCharacter::TurnAtRate);
PlayerInputComponent->BindAxis("LookUp", this, &APawn::AddControllerPitchInput);
PlayerInputComponent->BindAxis("LookUpRate", this, &ASurvivalCharacter::LookUpAtRate);
// handle touch devices
PlayerInputComponent->BindTouch(IE_Pressed, this, &ASurvivalCharacter::TouchStarted);
PlayerInputComponent->BindTouch(IE_Released, this, &ASurvivalCharacter::TouchStopped);
// VR headset functionality
PlayerInputComponent->BindAction("ResetVR", IE_Pressed, this, &ASurvivalCharacter::OnResetVR);
}
void ASurvivalCharacter::TimelineProgress(float Value) {
//CameraBoom->TargetArmLength = FMath::Lerp(StartLength, EndLength, Value);
}
void ASurvivalCharacter::TimelineEnd(float Value) {
//CameraBoom->TargetArmLength = FMath::Lerp(EndLength, StartLength, Value);
}
void ASurvivalCharacter::OnResetVR() {
UHeadMountedDisplayFunctionLibrary::ResetOrientationAndPosition();
}
void ASurvivalCharacter::Tick(float DeltaTime) {
Super::Tick(DeltaTime);
CurveTimeline.TickTimeline(DeltaTime);
}
void ASurvivalCharacter::BeginPlay() {
Super::BeginPlay();
if (CurveFloat) {
FOnTimelineFloat TimelineProgress;
FOnTimelineEventStatic TimelineEnd;
TimelineProgress.BindUFunction(this, FName("TimelineProgress"));
TimelineEnd.BindUFunction(this, FName("TimelineEnd"));
CurveTimeline.AddInterpFloat(CurveFloat, TimelineProgress);
CurveTimeline.SetTimelineFinishedFunc(TimelineEnd);
StartLength = 125.f;
EndLength = 175.f;
}
}
void ASurvivalCharacter::Sprint() {
GetCharacterMovement()->MaxWalkSpeed *= SprintMult;
CurveTimeline.PlayFromStart();
}
void ASurvivalCharacter::StopSprint() {
GetCharacterMovement()->MaxWalkSpeed /= SprintMult;
CurveTimeline.Stop();
Line 116 is this one:
TimelineProgress.BindUFunction(this, FName("TimelineProgress"));
Thanks in advanced for any help that I receive!