Infinite Fighter 개발일지 (4)

유영준·2023년 4월 3일
0

UE5 UNSEEN

목록 보기
4/18
post-thumbnail

2023.03.27 ~ 2023.04.02 개발일지

개선한 부분

캐릭터의 이동을 패드와 키보드의 입력을 분리

before

		if (MovementVector.Size() < 2)
			AddMovementInput(ScaledMovementInput);
		else
			AddMovementInput(ScaledMovementInput, MovementVector.Size() / 50);

after

		if      (CurrentInputType == ECommonInputType::MouseAndKeyboard) 
			AddMovementInput(ScaledMovementInput);
		else if (CurrentInputType == ECommonInputType::Gamepad)
			AddMovementInput(ScaledMovementInput, ((MovementVector.Size() / 50) < 0.7f) ? 0.4f : 1.0f);

Sprint 작동 방식 변경(꾹 누르는동안 빨라지는것으로 변경 / Tick의 속도 체크 부분 제거)

before

void AIFCharacter::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

	// stops Sprint once character is slowed down
	// 속도가 줄어들때 call 되는 함수를 찾아보자.. Tick 에 넣는거 너무 느낌 없다
	if (GetVelocity().Size() <= 400.0f)
		GetCharacterMovement()->MaxWalkSpeed = 400.0f;
}

void AIFCharacter::SprintStart()
{
	if (GetCharacterMovement()->MaxWalkSpeed != 600.0f)
	{
		GetCharacterMovement()->MaxWalkSpeed = 600.0f;
	}
}

after

void AIFCharacter::SprintStart()
{
	if (GetCharacterMovement()->MaxWalkSpeed != 600.0f)
	{
		GetCharacterMovement()->MaxWalkSpeed = 600.0f;
	}
}

void AIFCharacter::SprintEnd()
{
	GetCharacterMovement()->MaxWalkSpeed = 400.0f;
}

이때 Sprint 방식은 Enhanced Input에서 Hold의 방식으로 변경했다


노티파이를 많이 제거하고, 그 부분을 OnMontageStarted, OnMontageEnded 로 변경

before

많았던 노티파이를

after

한가지로 줄였다

DrawEnd, SheatheEnd 처럼 같은 기능을 하지만 달랐던 네이밍을 CanDoNextAction 으로 통일하였다

UIFCharacterAnimInstance::UIFCharacterAnimInstance()
{
	...

	OnMontageStarted.AddDynamic(this, &UIFCharacterAnimInstance::DrawStateStart);
	OnMontageStarted.AddDynamic(this, &UIFCharacterAnimInstance::CanDoNextActionFalse);
	OnMontageEnded.  AddDynamic(this, &UIFCharacterAnimInstance::DrawStateEnd);
}

void UIFCharacterAnimInstance::PlayParryingMontage()
{
	if(bCanDoNextAction)
		Montage_Play(ParryingMontage);
}

void UIFCharacterAnimInstance::DrawStateStart(UAnimMontage* Montage)
{
	if (Montage == SheatheMontage)
		bIsDrawState = false;
}

void UIFCharacterAnimInstance::CanDoNextActionFalse(UAnimMontage* Montage)
{
	bCanDoNextAction = false;
}

void UIFCharacterAnimInstance::AnimNotify_CanDoNextActionTrue()
{
	bCanDoNextAction = true;
}

void UIFCharacterAnimInstance::DrawStateEnd(UAnimMontage* Montage, bool bInterrupted)
{
	// Only Set true when the montage is fully played
	if (Montage == DrawMontage && !bInterrupted)
		bIsDrawState = true;
}

원시 포인터를 사용해 선언한 포인터 변수를 TObjectPtr로 바꿔주었다

언리얼5에서는 원시 포인터 대신 TObjectPtr 사용을 권장하기 때문에 바꿔주었다

(참고) https://docs.unrealengine.com/5.0/ko/unreal-engine-5-migration-guide/


추가한 부분

Block / Parrying 추가

Block 모션을 통해 블랜드 스페이스를 만들어주고,

스테이트 머신을 통해 Block State에서 움직이도록 구현하였다

블락 기능은 Q를 통해 진입이 가능한데, q를 2번 누르면 패링이 가능하도록 구현했다 (God of War와 동일하게 작동하는데 초점)

2번 누르는 기능은 Enhanced InputCombo 기능을 통해 구현했다

패링 모션은 루트 모션을 설정하고, 키값을 통해 살짝 전진하는 느낌을 주었다

다음은 패링 모션을 몽타주로 설정하고, 슬롯을 UpperBody로 추가시켰다


지금까지 만들었던 애니메이션을 다시 캐시로 저장하고, 상체를 사용하는 Montage와 블랜딩하였다

현재까지의 모습은 이러하다

개선할 점

  • 이번주에 시험도 보고 / 개인적인 일정이 많아 많은 부분 개발하지 못했는데, 다음주에는 충분한 양을 할 수 있도록...

다음주에 할 일

  • 진짜진짜 공격 만들기
  • 회피, 도끼 던지기 만들기
profile
토비폭스가 되고픈 게임 개발자

0개의 댓글