[Unreal] 06.애니메이션_BS, 몽타쥬, 콜리전

본 문서는 어소트락 언리얼엔진 게임프로그래머 양성과정의 강의를 토대로 필기한 내용입니다

애니메이션

블랜드 스페이스

입력 파라미터를 바탕으로 여러 개의 애니메이션을 블렌딩 하도록 설정

애니메이션 레이어 인터페이스

애니메이션 레이어들을 미리 만들어 놓고 다른 애니메이션 블루 프린트에 추가할 수 있다. 미리 만들어 둔 모듈을 블루 프린트에 조합하여 사용 가능

애니메이션 컴포짓

여러 개의 애니메이션을 하나의 유닛처럼 만드는 방식

몽타쥬 애니메이션

블루 프린트나 C++ 같은 코드로 애니메이션 재생을 시키기 위해 사용
인텔리전트 루프나 로직기반 애니메이션, 루트 모션 처리 등이 가능

  • 콤보어택 제작 등에 사용
  • 그룹과 슬롯을 지정하여 사용 가능
    • Concept : 공격 몽타쥬 재생 -> 기존에 들어오는 모션을 무시하고 해당 몽타쥬 재생
  • 애님 슬롯 매니저 : 커스텀 애니메이션을 슬롯으로 그룹화하여 사용 가능
  • 각각의 어택 애니메이션 마다 나눠서 섹션별로 재생 시킬 수도 있음
    • 링크를 통해 섹션들을 연결할 수도 있고 끊어버릴 수도 있다
    • 캐스팅 모션 : 애니메이션을 재생시킨 후 타이머 변수값 조건 충족되면 다음 애니메이션으로 재생 시키는 방식으로도 동작 가능
  • Notify
    • 공격중인지를 판단하는 변수, 콤보중인지를 판단하는 변수 선언
    • 원하는 트랙에 노티파이함수를 호출할 지점을 만들 수 있다
    • 콤보 인덱스를 미리 만들어 두고 노티파이 함수가 실행된다면 콤보 인덱스를 하나씩 늘려가는 방식으로 제작

공격

  • 공격 함수는 PlayerCharacter (부모 클래스)에서 사용하기 보단 자식 클래스에서 재정의를 할 수 있게 상속구조를 만들어 두는 것이 좋다
  • 여러 개의 직업마다 공격 함수는 다를 것이기 때문
  • 공격 함수는 Input을 받아오는 일반 함수로 만들고, 내부에 공격 가상함수를 만들어서 부모클래스-파생클래스에서 오버라이딩

  • 공격 애니메이션 재생 함수
  • 공격 함수
    • GetWorld()->SweepMultiByProfile()
  • 디버깅
    • ENABLE_DRAW_DEBUG
    • DrawDebugCapsule() 함수 이용해서 공격 범위 디버깅 가능

PlayerCharacter.h

class STUDY_240601_API APlayerCharacter : public ACharacter
{
  ...

protected:
	void OnMove(const FInputActionValue& InputValue);
	void OnAttack(const FInputActionValue& InputValue);
	void OnShield(const FInputActionValue& InputValue);
	void OnRotation(const FInputActionValue& InputValue);
	void OnCameraZoom(const FInputActionValue& InputValue);

protected:
	virtual void PlayAttack();
}

PlayerCharacter.cpp

void APlayerCharacter::OnAttack(const FInputActionValue& InputValue)
{
	PlayAttack(); // 가상 함수 호출
}

Rogue.h

class STUDY_240601_API ARogue : public APlayerCharacter
{
	...

protected:
	virtual void PlayAttack();
};

Rogue.cpp

#include "PlayerAnimInstance.h" // UAnimMontage 사용해야 함

...

void ARogue::PlayAttack()
{
	mAnimInst->PlayAttack();
}

AnimInstance.h

...

UCLASS()
class STUDY_240601_API UPlayerAnimInstance : public UAnimInstance
{
	...

public:
	void PlayAttack();
};

AnimInstance.cpp

void UPlayerAnimInstance::PlayAttack()
{
	// 몽타쥬 애니메이션 유효 검사
	if (mAttackMontage.IsEmpty()) return;

	// 몽타쥬 재생 중인지 판단
	if(!Montage_IsPlaying(mAttackMontage[0]))
	{
		Montage_SetPosition(mAttackMontage[0], 0.f);
		Montage_Play(mAttackMontage[0]);
	}
}

점프

  • CharacterComponent는 기본적으로 점프 애니메이션을 제공
  • GoundLoco
    • Idle -> JumpStart -> OnJump -> JumpEnd -> JumpRecovery 상태로 나눠짐
    • JumpRecovery는 Additive로 스테이트 합쳐짐

콜리전

  • 플레이어, 플레이어 공격, 몬스터, 몬스터 공격 네 가지 오브젝트를 추가
  • 프리셋에서 각 프로파일간의 콜리전과 콜리전 반응을 설정해주기
  • 변경된 값은 DefaultEngine.ini 파일에서 확인할 수 있다


© 2023 Jinsoo Lee. All rights reserved.

Powered by Hydejack v9.1.6