본문 바로가기

모바일 게임 개발/[입문]브러쉬유

21. 브러쉬유: 게임의 시작

 

 

# 게임을 시작하기 좋은 타이밍

   위젯이 준비가 되었을 때

 

게임이 시작된 후 GM_Game은 언제 색깔을 만드는 게 좋을까요? Master 위젯 속 Slot에게 만들어진 색을 보내주어야 하기 때문에 PC_Game에서 Master 위젯을 만들고 난 이후가 좋을 것 같아요. Master 위젯이 만들어 진 직후 게임모드(GM_Game)를 호출해서 색상 생성 과정을 포함한 게임 시작을 요청하겠습니다.

1. Master 위젯을 열어서 그래프(Graph) 모드로 바꾼 뒤 Construct 이벤트를 찾으세요(없으면 만드세요). 이벤트 노드만 남기고 연결된 다른 노드는 지워주세요.

이 노드는 위젯이 만들어진 직후에 자동으로 실행되는 이벤트 노드에요.

2. Get Game Mode노드와 Cast To GM_Game노드를 만들고 아래와 같이 연결하세요.

3. As GM Game 핀을 우클릭하고 Promote to Variable을 선택해서 변수를 만드세요. 이름은 GM으로 지으세요.

이제 Master 위젯은 언제든 GM 변수를 통해 게임모드에 접근해서 게임 시작 요청을 할 수 있습니다.

4. 다음으로 TryStartingNewRound 함수를 만드세요.

5. 기본적인 조건검사를 해보겠습니다. GM변수의 Get 노드를 만들고 IsValid 노드를 만드세요. (빨간색 Bool 형 Return Value 핀이 있는 노드로 만드세요.)

6. Branch 노드를 이용해 아래와 같은 노드망을 만드세요.

GM 변수가 유효한 값을 갖고 있는지 검사하는 작업이에요. Master 위젯에서는 여기까지 작업해 놓고 GM_Game으로 넘어가세요.

7. GM_Game을 열고 PrepareMatch라는 함수를 만드세요.

8. 이전 장에서 만들어 놓은 3가지 색깔 생성 함수를 모두 아래처럼 연결하세요.

먼저 배경색을 만들고, 만들어진 배경색을 다음 함수에 전달해서 정답 튜브색을 만듭니다. 그리고 마지막으로 튜브색과 구분되는 페이크 색을 만들면 끝.

저번 장에서 얘기했던 것 처럼 위 세 함수를 모두 실행하고 나면 알 찬 게(Colors 배열)가 만들어 집니다. (게 드립은 언제까지 이어질것인가)

9. Colors 변수를 Return Node에 꽂아주면 PrepareMatch 함수는 완성됩니다.

Return Node를 만드는 방법을 잊으셨다면 이전 강좌들을 보고오세요.

다시 Master 위젯 블루프린트의 TryStartingNewRound함수로 돌아오세요.

10. GM Get노드의 핀을 뽑아들고 방금 GM_Game에 만든 PrepareMatch 함수를 찾아서 만드세요.

11. SetTubes 이벤트 호출 노드를 찾아서 만들고 실행핀과 배열핀을 모두 연결하세요.

12. Return Node 노드를 두개 만들어서 아래와 같이 연결하세요.

새로운 시작을 GM_Game에 요청하는 함수를 일차적으로 완성해봤어요.

13. Event Construct 노드망의 끝부분에 TryStartingNewRound 함수 호출 노드를 만들어서 연결하세요.

Master 위젯은 생성되자마자 게임을 시작하려고 할 것입니다. ​

 

14. Compile & Save 하세요.

 

 


# 한번 쓴 튜브는 버리자

    Remove Tubes 함수 만들기

 

게임이 끝날때 까지 매 번 TryStartingNewRound 함수를 호출해서 새로운 라운드를 시작하는 방식을 사용해볼게요. 그러기 위해서는 이전 라운드에 사용한 튜브를 삭제하는 과정을 함수 안에 구현해야해요.

1. Master 위젯 안에서 RemoveTubes 함수를 만드세요.

이전 라운드에 사용한 튜브를 삭제하는 로직은 다음 순서로 이루어져요.

1) Samples(Horizontal Box)의 Slot들을 검사해서 튜브를 모두 삭제

2) Answers(Horizontal Box)의 Slot들을 검사해서 튜브를 모두 삭제

2. ClearSlot 이라는 매크로를 만드세요.

3. Inputs 노드를 선택한뒤 디테일 패널에서 Inputs에 항목을 하나 추가하세요. 데이터형을 PanelWidget으로 설정하고 이름은 Target으로 지어줍니다.

4. Inputs 노드의 Target 핀을 뽑은 상태로 Get All Children 노드를 찾아서 만드세요.

5. Get All Children 노드의 Return Value 배열 핀을 뽑아 들고 For Each Loop 노드를 찾아 만드세요.

6. For Each Loop의 Exec 실행핀을 뽑아서 Inputs 노드 위에 올려놓으세요. 실행핀이 자동으로 생성됩니다.

7. Inputs 노드의 Target 핀과 Exec 핀의 순서를 바꿔줄게요. Inputs 노드를 선택한 뒤 디테일 패널에서 Inputs 항목 옆 화살표를 이용해 순서를 바꾸세요.

 

8. For Each Loop 노드의 Array Element 핀을 뽑아들고 Cast To ItemSlot 노드를 만드세요.

여기까지 노드 설명을 해볼게요.

매크로를 실행시키면서 Answers 또는 Samples 라고 이름 붙인 Horizontal Box 변수를 전달해요. 매크로 안에서 전달받은 Horizontal Box를 검사해서 자식 위젯을 모두 가져오죠. 이 때 Get All Children 노드를 사용하는데 이 노드는 '일반적인 형태로' 모든 자식 위젯들을 모아줘요. 우리는 ItemSlot 위젯 위에 올라간 Item 위젯을 삭제하는 것이 목적이에요. 그래서 위젯을 특정지을 필요가 있는 것이고, 따라서 Cast To ItemSlot으로 위젯의 형태를 구체화 시켜야 해요.

참고로 각 Horizontal Box를 타겟으로 Get All Children 노드를 실행하면 아래 체크된 위젯들이 배열에 담겨올거예요. 머릿속에 그림이 그려지시나요?

9. Cast To ItemSlot 노드의 As Item Slot 핀을 뽑아서 Get Border_(숫자) 노드를 만드세요.

실제로 Item 위젯을 담는 Border까지 접근했습니다. 이제 자식 위젯(Item 위젯이겠죠)을 모두 삭제하면 될 것 같네요.

10. Border 노드의 아웃풋 핀을 뽑아서 Clear Children 노드를 만드세요.

11. For Each Loop 노드의 Completed 실행핀을 끌어서 Outputs 노드 위에 올려놓으세요.

ClearSlot 매크로 완성입니다. Compile & Save 하세요.

12. RemoveTubes 함수로 돌아와서 ClearSlot 매크로 노드를 두개 만드세요.

13. Variables 항목에서 Answers와 Samples 변수를 찾아 Get 노드를 만드세요. 그리고 아래와 같이 연결하세요.

14. Return Node 노드까지 깔끔하게 만들어서 실행핀을 연결하세요.

15. Compile & Save 하세요.

16. TryStartingNewRound 함수를 열고 RemoveTubes 함수 노드를 아래와 같이 연결하세요. Compile & Save도 해주세요.

이제 Master 위젯의 TryStartingNewRound 함수는 새로운 색을 받아오기 전에 ItemSlot의 모든 튜브를 삭제하게 됐어요.

 


# 중간 점검 및 이 장 마무리

 

.

게임을 실행해보면 위의 그림처럼 정답색 두 개와 페이크 색 두개가 차례대로 배치될거에요. 이번 장은 이것으로 끝났습니다. 다음 장에서는 카멜레온을 터치했을 때 Answers에 올라온 두 색의 혼합색으로 카멜레온을 칠하는 로직을 만들어 보겠습니다!