본문 바로가기

블루프린팅/4. 블루프린트 통신

[언리얼][블루프린트] 블루프린트의 형변환

부모클래스의 참조는 자식클래스의 변수와 함수에 접근할 수 없다. 형변환 함수를 이용해야 한다. 형변환의 또 다른 용도는 오브젝트 레퍼런스가 원하는 타입인지 안전하게 테스트 하는 것이다. 

1.부모 클래스를 게임모드베이스로 BP_GameModeWithScore 블루프린트를 만들고 더블클릭한다.

2. 내블루프린트 패널에서 Integer 타입의 GameScore변수와 AddGameScore함수를 생성한다.

3. AddGameScore함수 디테일 패널에서  Score라는 Integer타입의 입력파라미터를 추가한다. 이 함수는 GameScore변수에 포인트를 추가하는데 사용한다.

4. 함수의 그래프에서 다음 스크린샷에 표시된 액션을 추가한다. GameScore변수의 GET및 SET노드를 추가한다. PrintString을 추가한다. Add function도 추가한다. GameScore += Score를 만들기 위해서다

5. BP_GameModeWithScore를 컴파일하고 저장한다. 다음 단계는 BP_GameModeWithScore를 게임모드로 사용하도록 레벨을 세팅하는 것이다.

6. 레벨에디터의 툴바 오른쪽에 있는 세팅 버튼을 클릭하고 월드 세팅을 선택한다.

7. 게임모드 오버라이드 속성에서 BP_GameModeWithScore를 선택한다.

8. 선택된 게임모드에서 프로젝트를 만들때 사용한 템플릿게임모드를 선택한다.(BP_FirstPersonCharacter나 BP_ThirdPersonCharacter)

9. 블루프린트를 만들고 부모를 액터로 하고 이름을 BP_Collectable로 변경하고 블루프린트를 연다.

10. 컴포넌트 패널에서 스태틱메시 컴포넌트를 추가하고 디테일 패널에서 SM_ Status 메시를 선택하고 머티리얼의 엘리먼트0로가서 M_Metal_Gold를 선택한다.

또한 다음 스크린샷 표시된 것처럼 콜리전 프리셋을 OverlapAllDynamic으로 변경한다.

11. 이벤트그래프를 우클릭하고 ActorBeginOverlap 이벤트의 Other Actor의 파란핀을 끌어 그래프에 놓아 컨텍스트 메뉴를 연다.

12.  프로젝트를 만들때 사용한 템플릿게임모드 형변환을 선택한다.

12. Get Game Mode노드를 추가하고 Return Value파란점을 끌어 컨텍스트창에서 BP_GameModeWithScore Cast를 추가한다. As BP game Mode With Score 파란점을 끌어 Add Game Score 액선을 선택한다.

13.  Add Game Score 액선 Score 입력 파라미터에 50을 입력한다.

14. 이벤트그래프를 우클릭해서 DestroyActor함수를 추가한다. 노드의 흰색 핀을 연결한다. ActorBeginOverlap이벤트의 내용은 다음 스크린샷과 같다. 다시한번 설명하면

  • Event ActorBegineOverlap에 어떤 액터가 겹치면 이벤트가 발생한다 
  • Other Actor가 cast To BP_FirstPersonCharater함수에서 플레어인지 체크한다.
  • Get Game Mode는 레벨의 현재 게임모드를 가져오는데 BP_GameModeWithScore로 형변환후 Score 변수를 Add Game Score에 넘겨준다. 점수가 50더해지고 마지막으로 Actor자신(동상)을 파괴한다.

Get Game Mode 함수는 현재 레벨에서 사용하는 게임모드에 대한 참조를 반환한다. 그러나 반환값의 타입은 게임모드 베이스다. 이 타입의 변수를 사용해서 Add Game Score 함수에 접근할 수 없다. 따라서  BP_GameModeWithScore에 형변환을 사용할 필요가 있었다.

 

15. BP_Collectable을 컴파일 한다.  레벨에 몇개 끌어다 놓고 인스턴스 몇개를 만든다. 캐릭터를 사용해 조각상을 수집하고 화면에 출력되는 현재 점수를 확인한다.

 

스크린샷에 나타나는 2개의 흰색 연결핀은 경유 노드라고 한다. 컨텍스트 메뉴에서 추가할 수 있다. 하얀 선위를 더블클릭해도 생기는 듯하다.