플레이어의 이동 및 이동 애니메이션을 구현하고 있다.
UPlayerMove::UPlayerMove()
{
PrimaryComponentTick.bCanEverTick = true;
}
void UPlayerMove::BeginPlay()
{
Super::BeginPlay();
moveComp->MaxWalkSpeed = walkSpeed;
}
void UPlayerMove::TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
{
Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
Move();
}
void UPlayerMove::InputHorizontal(float value)
{
direction.Y = value;
}
void UPlayerMove::InputVertical(float value)
{
direction.X = value;
}
void UPlayerMove::InputJump()
{
me->Jump();
}
void UPlayerMove::Move()
{
direction = FTransform(me->GetControlRotation()).TransformVector(direction);
me->AddMovementInput(direction);
direction = FVector::ZeroVector;
}
void UPlayerMove::Turn(float value)
{
me->AddControllerYawInput(value);
}
void UPlayerMove::LookUp(float value)
{
me->AddControllerPitchInput(value);
}
void UPlayerMove::SetupInputBinding(class UInputComponent* PlayerInputComponent)
{
PlayerInputComponent->BindAxis(TEXT("Turn"), this, &UPlayerMove::Turn);
PlayerInputComponent->BindAxis(TEXT("LookUp"), this, &UPlayerMove::LookUp);
PlayerInputComponent->BindAxis(TEXT("Horizontal"), this, &UPlayerMove::InputHorizontal);
PlayerInputComponent->BindAxis(TEXT("Vertical"), this, &UPlayerMove::InputVertical);
PlayerInputComponent->BindAction(TEXT("Jump"), IE_Pressed, this, &UPlayerMove::InputJump);
}
void UPlayerAnim::NativeUpdateAnimation(float DeltaSeconds)
{
Super::NativeUpdateAnimation(DeltaSeconds);
auto ownerPawn = TryGetPawnOwner();
auto player = Cast<AMyPlayer>(ownerPawn);
if (player)
{
FVector velocity = player->GetVelocity();
FVector forwardVector = player->GetActorForwardVector();
speed = FVector::DotProduct(forwardVector, velocity);
FVector rightVector = player->GetActorRightVector();
direction = FVector::DotProduct(rightVector, velocity);
auto movement = player->GetCharacterMovement();
isInAir = movement->IsFalling();
}
}
애니메이션 자체로 캐릭터의 이동이 진행되면서, 플레이어의 capsule collider가 캐릭터 이동만큼 움직이지 않고, 사용자의 input 만큼만 움직이니 두 거리의 차이만큼 다시 돌아오게 된다.
root motion으로 변경하려니, 애니메이션이 부자연스럽다.
해결해서 새로 글을 올리는 걸로!
'Old > UE5' 카테고리의 다른 글
RPC (0) | 2024.01.29 |
---|---|
Network (1) | 2024.01.29 |
Animation (1) | 2024.01.25 |
Reflection (2) | 2023.12.29 |
Garbage Collection (0) | 2023.12.28 |