이번 글부터는 그냥 생각나는 기능들을 기존에 프로젝트에
하나씩 추가해볼 예정이다.
기능 단위로 추가할거라 아직 전체적인 포트폴리오를 구상하지는 않은 상태이다.
오늘은 쉬프트키를 이용한 대쉬를 넣어보려 한다.
먼저 쉬프트키 등록부터 해야한다.
그리고 나서 정말 간단하게 만드는 방법은 아래 처럼 캐릭터 블루프린트를 편집해주는 것이다.
간단하게 설명하자면,
Shift키를 누르면 현재 Actor의 위치에서 앞쪽 방향으로 위치를 이동시키는 블루프린트라고 생각하면 된다.
핵심은 Get Actor Rotation으로 캐릭터 방향을 가져오고 Get Forward Vector, Launch Cahracter로 전진방향으로 이동하게끔 하는 부분이지 않을까 싶다.
그리고 Do Once의 Reset쪽으로 Delay를 연결시켜 주지 않으면
한번만 실행하고 끝난다. Do Once이기 때문이다.
이것만 추가해놓고 실행해보면,
이렇게 맹구같이 쉬프트 키를 누를때마다 전진하는 모습을 볼 수 있다.
이제 이 내용을 소스로 추가해보려 한다.
먼저 MyCharacter.h에 Do Once를 추가해야 한다.
DoOnce가 언리얼에서 제공되는 함수일거라고 생각했는데,
없나보다.
그래서 그냥 정말 간단하게 아래처럼 소스를 추가했는데,
잘된다.
void AMyCharacter::DoOnce()
{
FVector Location;
LaunchCharacter(/*GetActorRotation() + */GetActorForwardVector() * 1400, false, false);
}
이제 애니메이션 몽타주를 하나 만들어서
Dash 애니메이션을 한번 넣어보자.(여긴 설명하는 곳은 아니니 몽타주 만드는 부분은 따로 설명하진 않겠다.)
몽타주를 추가한 이후에 소스에 아래와 같이 추가한다.
먼저 MyAnimInstance.h에
public:
...
void PlayDashMontage();
bool GetDashing();
void SetDashing(bool bDash);
...
private:
...
bool bDashing = false;
그리고 Cpp에
UMyAnimInstance::UMyAnimInstance()
{
...
static ConstructorHelpers::FObjectFinder<UAnimMontage> DASH_MONTAGER(TEXT("AnimMontage'/Game/BluePrint/AnimationMontage/AM_ShinbiDash.AM_ShinbiDash'"));
if (DASH_MONTAGER.Succeeded())
{
DashMontage = DASH_MONTAGER.Object;
}
}
bool UMyAnimInstance::GetDashing()
{
return bDashing;
}
void UMyAnimInstance::SetDashing(bool bDash)
{
if (GEngine)
{
if (bDash)
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("SetDashing True"));
else
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("SetDashing False"));
}
bDashing = bDash;
}
이렇게 Dash 몽타주를 추가해주고,
이제 아까 위에서 추가한 Dash 쪽에
Dash 몽타주를 플레이해주는 부분만 추가해주면 된다.
추가에 앞서서 대쉬를 계속 사용할 수 없도록 대쉬가 끝난 이후에
다시 사용할 수 있게끔 추가해뒀다.
이제 다시 MyCharacter.cpp로 넘어와서
void AMyCharacter::OnAttackMontageEnded(UAnimMontage* Montage, bool bInterrupted)
{ // 여긴 몽타주 끝나면 타는 곳이라 이름으로 일단 구분해줬다. 더 좋은 방법이 있긴 할것 같다.
if (Montage->GetName() != "AM_ShinbiDash")
{
IsAttacking = false;
}
else if (Montage->GetName() == "AM_ShinbiDash")
{
if (MyAnim)
MyAnim->SetDashing(false);
}
}
void AMyCharacter::DoOnce()
{
if (MyAnim)
{
if (MyAnim->GetDashing()) return;
MyAnim->PlayDashMontage(); // Dash몽타주 플레이
MyAnim->SetDashing(true); // 대쉬중 체크.
}
FVector Location;
LaunchCharacter(/*GetActorRotation() + */GetActorForwardVector() * 1900, false, false); // 캐릭터 전진
}
이렇게 추가해주고
플레이해보면,
이런식으로 멋있는 대쉬가 완성됐다!
더 좋은 방법이 있긴 할 것 같지만,
일단 내가 할 수 있는 선에서 한번 해봤다.
다음 글에서는 적 캐릭터들을 한번 추가해보겠다.
'언리얼엔진 > 포트폴리오' 카테고리의 다른 글
언리얼 엔진 포트폴리오 만들기 - 4. Archer 추가하기 1편 (0) | 2023.04.25 |
---|---|
언리얼 엔진 포트폴리오 만들기 - 3. HP 흡수하는 적 만들기 (0) | 2023.04.03 |
언리얼 엔진 포트폴리오 만들기 - 2. 적 캐릭터 추가하기 (0) | 2023.03.09 |