강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

ajkdfj님의 프로필 이미지
ajkdfj

작성한 질문수

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

몽타주 바인딩에 대해 궁금한 점이 있습니다.

작성

·

64

0

안녕하세요. 혼자 배운 내용을 토대로 개발을 해보고 있는데 콤보 액션 몽타주가 끝나면 델리게이트를 설정을 하는데 이에 대해 궁금한 점이 있습니다.

(1번 코드)AnimInstance->OnMontageEnded.AddDynamic(this, &ALuckyCharacterBase::ComboAttackEnd);

콤보 액션이 끝난 후 바인딩하는 코드를 1번 코드처럼 작성을 해도 상관이 없는 건가요?

 

(2번 코드)FOnMontageEnded ComboEndDelegate;
ComboEndDelegate.BindUObject(this, &ALuckyCharacterBase::ComboAttackEnd);
AnimInstance->Montage_SetEndDelegate(ComboEndDelegate, ComboAttackMontage);

2번 코드처럼 작성하는 이유가 현재 콤보 액션과 다른 콤보 액션을 또 만들면 이 두 콤보 액션을 구분하여 함수를 호출하기 위해 작성을 하는 것인지 궁금합니다.

답변 2

0

이득우님의 프로필 이미지
이득우
지식공유자

1번 코드가 동작하는지요?

OnMontageEnded의 선언이 Dynamic Delegate가 아닌데 AddDynamic이 먹힐 것 같지 않습니다.

ajkdfj님의 프로필 이미지
ajkdfj
질문자

1번 코드로 해보니 플레이를 하면 처음에만 공격이 가능하고 그 이후에는 가능하지가 않습니다.
로그를 확인해보니 LogOutputDevice: Error: [Callstack] 0x00007ffd9427be24 UnrealEditor-Lucky.dll!TBaseUObjectMethodDelegateInstance<0,ALuckyCharacterPlayer,void __cdecl(void),FDefaultDelegateUserPolicy>::Execute() [D:\UE_5.3\Engine\Source\Runtime\Core\Public\Delegates\DelegateInstancesImpl.h:650] LogOutputDevice: Error: [Callstack] 0x00007ffd94279c0e UnrealEditor- (로그 일부분)

이렇게 뜹니다. 바인딩이 제대로 안된것 같습니다. Dynamic Delegate인지 알 수 있는 방법이 있나요? 소스코드에서 정의를 살펴보니
DECLARE_DELEGATE_TwoParams(FOnMontageEnded, UAnimMontage*, bool /*bInterrupted*/)

이렇게 되어있는데, 위와 같이 되어 있으면 Dynamic Delegate가 아닌건가요?

 

Dynamic Delegate 가 아니라면 2번코드와 같이 작성을 해야 하는지 궁금합니다.

이득우님의 프로필 이미지
이득우
지식공유자

네 강의에도 설명했지만 블루프린트에서도 사용 가능한 Dynamic Delegate는 선언 매크로가 다릅니다.

0

안녕하세요, 인프런 AI 인턴입니다. ajkdfj님.

언리얼 엔진에서 몽타주가 종료될 때 특정 함수를 실행하기 위한 델리게이트 설정에 대해 좋은 질문을 주셨습니다.

(1번 코드)에서는 AnimInstance->OnMontageEnded.AddDynamic을 사용하여 몽타주가 끝날 때마다 ComboAttackEnd 함수를 호출하도록 합니다. 이 방식은 모든 몽타주 종료 시점에서 동일한 함수가 호출되게 됩니다. 즉, 여러 몽타주가 동일한 종료 함수를 공유하게 됩니다.

(2번 코드)에서는 FOnMontageEnded 타입으로 델리게이트를 선언하고 Montage_SetEndDelegate 함수를 사용하여 특정 몽타주(여기서 ComboAttackMontage)에 대해 종료 델리게이트를 설정합니다. 이 방식은 특정 몽타주에 대해서만 델리게이트를 설정할 수 있어, 서로 다른 몽타주에 대해 개별적으로 함수를 설정하고 싶을 때 유용합니다.

따라서, “2번 코드처럼 작성하는 이유”는 말씀하신 대로 여러 개의 콤보 액션이 있을 때, 서로 다른 콤보 액션이 종료되었을 때 개별적인 동작을 실행할 수 있도록 할 경우에 그 방법을 사용할 수 있습니다.

이와 관련된 좀 더 구체적인 정보를 보시려면 이 링크들을 참고해 주세요:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

ajkdfj님의 프로필 이미지
ajkdfj

작성한 질문수

질문하기