나는 원한다. 2단점프
그것도 2단점프의 애니메이션은 하늘에서 한바퀴 도는 그런 애니메이션을
그래 마치 테일즈런너의 2단점프처럼
좀 찾아보니 JumpMaxCount를 수정하면 2단점프 된다해서 해봤는데 안된다...
안됐다.(왜지 아직도 모르겠음)
그래서 그냥 스타팅 팩에 포함된 캐릭터를 상속받고(Enhanced Input 처음부터 구현하기 싫어...)
해당 클래스에서 점프를 처음부터 구현하려하는데 아무래도 미련이 남는다. 뭔가 방법이 있을거 같은데...
그래서 그냥 서칭좀 더하다보니
찾았다...
캐릭터 무브먼트가 아니라 그냥 캐릭터에 있었다...
블루프린트에서 수정해도 되겠지만(상속받은 내 c++클래스를 상속받은 bp를 만들었다.)
c++에서 수정해보도록 하자
왜 이번에는 되는걸까...
그리고 왜 생성자에서 값을 바꾸는데 bp에서 확인이 불가능한걸까 그리고 또 다른 문제로 2단점프시에 점프력이 낮다.
블루프린트 표기문제는 에디터를 껏다가 다시 실행하니 해결됐고
점프력이 낮은거는 기분탓인지 진짜인지 알수가없다.
확인결과 진짜다...
이유를 알았다. 설명을 듣고보니 물리적으로 이게 맞는거 같아서 굳이 수정하진 않겠다.
만약 이 문제를 수정하고 싶다면
(jump함수 공식문서)
jump가 가상함수이므로 오버라이딩 해서 사용하면 된다.
// MyCharacter.h
class AMyCharacter : public ACharacter
{
virtual void Jump() override;
};
// MyCharacter.cpp
void AMyCharacter::Jump()
{
// 점프 직전에 실행할 로직
if (JumpCurrentCount == 1) // 두 번째 점프 실행 시
{
// 현재 수직 속도 초기화
FVector Velocity = GetCharacterMovement()->Velocity;
Velocity.Z = 0.f;
GetCharacterMovement()->Velocity = Velocity;
}
// 기본 점프 동작 호출
Super::Jump();
}
이런식으로.
이제 다음으로 2단점프시 애니메이션을 넣어주자.
애니메이션 몽타쥬를 이용하면 쉽게 될 듯 하다.
몽타쥬를 넣기위해서 jump함수를 오버로딩 해줬다.
UCLASS()
class TALES_API ARunner : public AtalesCharacter
{
GENERATED_BODY()
public:
ARunner();
protected:
virtual void Jump() override;
private:
UPROPERTY(EditAnywhere,Category=Animation)
TObjectPtr<class UAnimMontage> RollingAnimation;
void PlayRollingAnimation();
};
클래스헤더파일코드이다.
ARunner::ARunner()
{
JumpMaxCount = 2;
}
void ARunner::Jump()
{
if (JumpCurrentCount == 1)
{
PlayRollingAnimation();
}
Super::Jump();
}
void ARunner::PlayRollingAnimation()
{
if (RollingAnimation)
{
UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance();
AnimInstance->Montage_Play(RollingAnimation);
}
}
클래스cpp파일이다.
굳이 하드코딩으로 몽타쥬를 지정하지는 않고 bp에서 지정해주자.
뭔가 부자연스러운 느낌은 없지않아 있지만 이정도면 일단 만족스럽게 해결됐다.
'IT > UE5' 카테고리의 다른 글
[UE5] 착지 시점 감지 [2단점프구현 - 2] (0) | 2025.03.21 |
---|---|
LaunchCharacter와 AddImpulse차이 (0) | 2025.03.21 |
GameInstanceSubSystem (0) | 2025.03.20 |
언리얼엔진의 스마트 포인터와 MakeShareable (0) | 2025.03.19 |
SetOwner 와 SetInstigator의 차이 (0) | 2025.03.15 |