[Unreal] 이득우의 언리얼 C++ 게임개발의 정석 5

2022. 3. 11. 16:29·Game Programming/Unreal
애님 몽타주
//CAnimInstance.h

private:
	UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = "Montage",
    Meta=(AllowPrivateAccess = true))
		UAnimMontage* AttackMontage;
UCAnimInstance::UCAnimInstance()
{
	static ConstructorHelpers::FObjectFinder<UAnimMontage> ATTACK_MONTAGE(TEXT("AnimMontage'/Game/Character/Warriors/Montages/AttackMontage.AttackMontage'"));
	if (ATTACK_MONTAGE.Succeeded())
	{
		AttackMontage = ATTACK_MONTAGE.Object;
	}
}

void UCAnimInstance::PlayAttackMontage()
{
	if (!Montage_IsPlaying(AttackMontage))
	{
		Montage_Play(AttackMontage, 1.0f);
	}
}

- AnimInstance에서 몽타주 실행을 추가해준다.

- body슬롯을 추가해주고 전체 동작을 위한 Fullbody로 이름 짓는다.

- defaultslot추가를 해주고 슬롯을 Fullbody로 바꾼뒤에 최종 애님그래프로 연결해준다.

//MyCharacter.cpp

void AMyCharacter::Attack()
{
	auto AnimInstance = Cast<UCAnimInstance>(GetMesh()->GetAnimInstance());
	if (!!AnimInstance) return;

	AnimInstance->PlayAttackMontage();
}

- BindAction에 해당 함수를 넣어준다.

- 만든 AnimInstace를 불러와서 해당 몽타주를 실행시켜준다.

 

델리게이트

- 특정 객체가 해야 할 로직을 다른 객체가 대신 처리할 수 있도록 만드는 보편적인 설계

- c++객체만 사용할 수 있는 델리게이트와 c++, 블루프린트 객체가 모두 사용할 수 있는 델리게이트가 있다.

- 블루프린트 객체와도 연동하는 델리게이트를 다이나믹 델리게이트라고 한다.

- 애님 인스턴스에는 몽타주 재생이 끝나면 발동하는 OnMontageEnded라는 델리게이트를 제공한다.

 

애님 노티파이

- 애니메이션을 재생하는 동안 특정 타이밍에 애님인스턴스에게 신호를 보내는 기능

 

Montage_JumpToSection();

- 다음 섹션에 있는 몽타주를 재생시켜준다.

 

void AMyCharacter::PostInitializeComponents()
{
	Super::PostInitializeComponents();
	CAnim = Cast<UCAnimInstance>(GetMesh()->GetAnimInstance());
	if (NULL == CAnim) return;

	CAnim->OnMontageEnded.AddDynamic(this, &AMyCharacter::OnAttackMontageEnded);

	CAnim->OnNextAttackCheck.AddLambda([this]()->void {
		CanNextCombo = false;

		if (IsComboInputOn)
		{
			AttackStartComboState();
			CAnim->JumpToAttackMontageSection(CurrentCombo);
		}
	});
}

- AnimInstance에 있는 OnNextAttackCheck 델리게이트에 AddLambda로 함수를 추가해준다.

 

void UCAnimInstance::AnimNotify_AttackHitCheck()
{
	OnAttackHitCheck.Broadcast();
}

- Broadcast() : 멀티캐스트 델리게이트에 등록된 모든 함수를 호출하는 명령이다.

- 이것을 통해 추가해주었던 함수를 호출해준다.

- 결국 AttckHitCheck 노티파이가 불러와졌을때 OnAttackHitCheck 델리게이트에 추가된 함수를 불러와서 각 콤보에 대한 작동을 하게 만든다.

저작자표시 (새창열림)

'Game Programming > Unreal' 카테고리의 다른 글

[Unreal] 이득우의 언리얼 C++ 게임개발의 정석 7  (0) 2022.03.15
[Unreal] 이득우의 언리얼 C++ 게임개발의 정석 6  (0) 2022.03.11
[Unreal] 이득우의 언리얼 C++ 게임개발의 정석 4  (0) 2022.02.28
[Unreal] 이득우의 언리얼 C++ 게임개발의 정석 3  (0) 2022.02.25
[Unreal] 이득우의 언리얼 C++ 게임개발의 정석 2  (0) 2022.02.24
'Game Programming/Unreal' 카테고리의 다른 글
  • [Unreal] 이득우의 언리얼 C++ 게임개발의 정석 7
  • [Unreal] 이득우의 언리얼 C++ 게임개발의 정석 6
  • [Unreal] 이득우의 언리얼 C++ 게임개발의 정석 4
  • [Unreal] 이득우의 언리얼 C++ 게임개발의 정석 3
chanheess
chanheess
'왜' 그렇게 했는가?에 대한 생각으로 공부 및 작업의 저장관리
  • chanheess
    왜 그렇게 생각했는가?
    chanheess
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Backend Programming
      • Game Programming
        • Unreal
        • DirectX
      • C++
        • Memo
        • Basic
        • Effective Modern
      • Algorithm
        • Memo
        • Baekjoon
        • Programmers
        • HackerRank, LeetCode
      • Data Structure
      • Design Pattern
      • Etc
        • Memo
        • Daily Log
        • Book
  • 최근 글

  • 최근 댓글

  • 태그

    dfs
    c++ 기초 플러스
    JWT
    프로그래머스
    Java
    JPA
    spring
    SpringSecurity
    백준
    알고리즘
    오블완
    dp
    티스토리챌린지
    위클리 챌린지
  • hELLO· Designed By정상우.v4.10.0
chanheess
[Unreal] 이득우의 언리얼 C++ 게임개발의 정석 5
상단으로

티스토리툴바