본문으로 바로가기

[Unreal Engine 4] Level Blueprint 를 C++로 접근하기

category UnrealEngine/기능 2020. 8. 18. 22:11
언리얼엔진4로 작업을 하다보면, Level 에 있는 Actor 간 통신을 하기에 중개자가 있으면 좋을 것 같단 생각을 한다.
이를 위해 다양한 방법을 사용하는데 우리는 Level을 사용할 것이다.
( 우리가 DirectX나 또는 소프트웨어 렌더러를 사용한다면 Scene 또는 Manager 정도로 생각하면 될 것 같다. )
Level을 C++로 작성하여 Custom 함수도 추가하고, Actor 간의 통신을 유연하게 할 예정이다.

작성할 내용은, 각 Scene에 있는 몬스터들을 추가한 후 Level에게 알려주고
몬스터가 다 죽는 이벤트가 발생할 시에 Level 의 Delegate로 모두에게 BroadCasting 하는 방법으로 작성할 예정이다.

 

기본적으로 Level Blueprint는 ALevelScriptActor, 즉 Actor 형식이다.

이를 상속받아 새로운 Level Actor를 생성한다.

 

Show All Classes 에 체크한 뒤, LevelScriptActor를 검색한다.

 

각 레벨 마다 하는 행동이 다를 수 있으니 Base -> Derived 형태로 상속하여 사용할 것이므로 BaseLevel  로 추가한다. 
위와같이 몬스터에 관련된 함수들을 추가해준다. Delegate를 사용할 것 이므로 Monster Count가 0 될땐 BroadCast를 해준다.
실제로 사용할 Level 에서 Level Blueprint를 열어, Class Settings에서 Parent Class를 자신의 LevelScripActor로 변경해주어야 한다.

 

자신의 LevelScriptActor에서 추가한 함수가, Level Blueprint에서도 보일 수 있게 수정할 수 있다.

다음은 Actor들의 Reference를 받아 Destroy 시키는 DestroyActors 함수이다.

 

 

자신의 LevelScriptActor에서 작성한 함수가 Level Blueprint에서 보이려면 UFUNCTION과 Specifier 작성 필수이다.

눈에 띄는건 DestroyActors의 UPARAM(ref) 이라는 매크로인데, 이는 함수가 받는 인자가 Blueprint 상에서는 왼쪽

에서 와야 한다는 뜻이다.

( -> 즉 UPARAM(ref)를 사용하지 않으면, Actors 라는 인자는 Blueprint 노드의 오른쪽에 위치하게 된다. )

실제 사용 예, Actors가 왼쪽에 위치하는게 보이는 가?

만약 UPARAM(ref) 을 사용하지 않으면, 위와같이 배치되게 된다.

 

왜냐면, 블루프린트는 인자를 Out 형식으로 쓸 수도 있기 때문이다.

 

(즉 한 함수를 통하여 2 개 이상의 값이 반환되어야 한다면, Return 타입만으로는 관리할 수 없다,

이를 위해 인자로도 정보를 받아낼 수 있게 하는데, Blueprint는 함수의 인자가 실제로 정보를 받는 인자인지, 정보를 밖으로 배출하는 인자인지 알 수 없기 때문에 UPARAM(ref) 매크로로 관리해준다.)

 

블루프린트에서 왼쪽은 받는 인자이고, 오른쪽은 배출하는 인자 이다. ( In & Out )