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

themoon007님의 프로필 이미지
themoon007

작성한 질문수

이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템

5강 : 공격 판정 시스템의 구현

언리얼 기본 제공 태스크 UAbilityTask_WaitTargetData

작성

·

342

·

수정됨

0

언리얼이 기본제공하는 태스크들이 정말 많아서 좀 둘러보다가 저희가 만든 AT_Trace랑 비슷한 "UAbilityTask_WaitTargetData"라는 게 있어서 좀 살펴봤는데요.

 

Activate()에 있는 구현 내용이 중복되는 BeginSpawningActor()FinishSpawningActor() 함수가 있는데 임의로 블루프린트에서 이 태스크를 실행해보니 Activate()가 실행이 안되고 이 두 함수가 실행되는 걸 봤습니다.

이런 식으로 그냥 실행해봤는데요.

사실 코드에선 어빌리티에서 CreateTarget()을 하고 ReadyForActivation()까지 호출해야 AT의 Activate()가 실행되는데 블루프린트에서는 이 노드 호출만으로 어떻게 AT가 실행까지 되는지도 잘 모르겠습니다.

 

거기에 UAbilityTask_WaitTargetData 처럼 Activate() 대신에 BeginSpawningActor()/FinishSpawningActor() 가 실행되는 이유도 알고 싶습니다....

이 두 함수 존재의 설명은 엔진 주석에 나와있어서 어느정도 파악이 됐는데 문제는 코드에서든 블루프린트에서든 호출되는 조건을 잘 모르겠습니다...

답변 1

0

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

C++과 블루프린트 API는 비슷하면서도 API 호출 체계가 다릅니다.
예를 들어 C++ 은 Activate 함수에서 ReadyForActivation을 반드시 호출해야 하지만 블루프린트에서 ReadyForActivation은 언급한 함수의 구현부에 이미 내장되어 있지요.
블루프린트는 기획자 용으로 만들어지다보니 에픽이 간편하게 호출하도록 설계했다고 생각하면 될 것 같아요.

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

여러가지 테스트를 해보았는데요.

주석 설명을 자세히 보니 BeginSpawningActor()와 FinishSpawningActor()를 사용하려면 매개변수 이름을 강조하길래 이게 블루프린트 API 기능인지, 리플렉션 기능인지는 잘 몰라도.

그냥 태스크 생성 Static 함수의 매개변수 이름을 동일하게 맞추니까 블루프린트에서 ABAT_Trace 를 호출했을 때, Activate() 대신 BeginSpawningActor()와 FinishSpawningActor() 가 호출됩니다.

반드시 Class 라는 이름이어야 하며, 반대로 Class라는 이름으로 지었으면 신기하게 BeginSpawningActor()와 FinishSpawningActor() 가 반드시 정의되 있어야 하는 듯 합니다. (없으면 없다고 블루프린트 컴파일 에러납니다..)

 

이 방식을 제공하는 이유가 기존 Activate()에서 타겟 액터를 스폰하는 방식은 "it would not be possible to pass in dynamic "ExposeOnSpawn" actor properties." 라고 하는데 이게 혹시 무슨 말인지 알 수 있을 까요....

BeginSpawningActor()와 FinishSpawningActor() 를 사용하면서 얻는 이점이 무엇인지 설명이 이해가 잘 가지 않습니다....

 

마지막 질문은 무슨 뜻인지 알아냈습니다. 감사합니다.

themoon007님의 프로필 이미지
themoon007

작성한 질문수

질문하기