본문 바로가기

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

25. 브러쉬유: 생명력

 

 

# 이번 장에서 만들 내용

   생명력 감소

 

이번 장에서는 플레이어가 같은 색상 만들기에 실패했을 경우 생명력 감소와 콤보 초기화 패널티를 받게 해볼게요.

 

패널티

 

serviceapi.nmv.naver.com

 

 


# 생명력 감소 이벤트 만들기

   Master 위젯

 

1. Master 위젯에서 ReduceLife라는 이름의 Custom Event를 만드세요.

2. LifeBox 위젯을 Get 노드로 호출한 뒤 Get HorionzalBox_(숫자) 노드를 만드세요.

HorizontalBox를 불러오려면 먼저 디자이너 탭에서 Horizontal Box의 IsVariable 옵션을 켜주어야 해요.

3. Horizontal Box 핀을 뽑은 상태로 GetChildrenCount 노드를 찾아서 만드세요.

Horizontal Box 안에는 카멜레온 모양 아이콘이 담겨있어요. 아이콘 1개가 생명력 1개에요. Get Children Count 노드를 이용해 현재 몇개의 아이콘(생명력)이 있는지 검사합니다.

4. 대소비교 노드 ">"와 Branch 노드를 연결해서 0보다 큰지 확인하는 로직을 짜주세요.

ReduceLife가 호출됐을 때,

생명력이 하나라도 있다면(True) 생명력을 하나 지우고, 콤보를 초기화 하고, 다음 라운드를 시작하게 만들고

생명력이 하나도 없다면(False) 게임을 종료할거예요.

5. HorizontalBox 핀을 뽑은 상태에서 Remove Child At 노드를 찾아서 만드세요.

Remove Child At 노드는 패널 위젯 속 특정 위치(Index)에 있는 자식 위젯을 지워주는 노드에요. 이때 각 아이콘의 위치는 아래와 같아요.

맨 왼쪽이 0번이에요.

 

3개일때는 2번을 지워야 하고

2개일 때는 1번을 지워야 하고

1개일 때는 0번을 지워야 해요.

생명력 개수에서 1을 뺀 위치의 생명력을 지우면 됩니다.

6. Get Children Count 노드의 아웃풋 핀을 뽑고 Integer - Integer 노드를 만드세요. 아래와 같이 연결하세요.

7. 지난 장에서 만든 ClearCombo 이벤트와 TryStartingNewRound 함수 노드를 차례로 연결하세요. 연결이 끝났으면 Compile & Save

8. GM_Game 블루프린트를 열고 CheckColor 이벤트를 찾으세요.

9. Get MasterWidget 노드의 아웃풋 핀을 뽑은 상태로 ReduceLife 노드를 검색해서 만들고, 아래처럼 연결하세요. Compile & Save 하세요.

10. 플레이 버튼을 눌러서 동작을 확인하세요.

 

생명령/콤보 패널티

 

serviceapi.nmv.naver.com

잘 동작하네요 :)

 

 


# 변수 값으로 초기 생명력 정하기

 

변수 값을 이용해서 간편하게 초기 생명력 개수를 설정하는 방법을 구현해볼게요. 이 방법의 특징은 게임 실행시간에 생명력 아이콘이 만들어 지는 방법이라는 거예요.

1. LifeBox 위젯을 여세요.

2. 디자이너 모드에서 생명력 아이콘을 한개만 남기고 다 지우세요. 하나 남은 아이콘은 SampleImage로 이름을 바꾸세요.

 

실시간으로 생성한다고 했으면서 한개를 남기는 이유는 샘플 디자인으로 사용하기 위해서에요. 아래 과정을 따라가다보면 그 이유를 아실 수 있을거예요.

3. 그래프 탭으로 넘어가서 Integer형 InitialLife 변수를 만드세요.

4. InitialLife 변수의 디테일 패널에서 Default Value 값을 원하는 생명력 개수만큼 올리세요. 저는 일단 3으로 하겠습니다.

5. Construct 이벤트 노드를 만드세요.

6. SampleImage 변수를 불러오는 Get 노드를 만드세요.

이제 샘플 이미지의 속성을 다 뽑아서 변수에 따로 저장해 둘거에요. 이미지 위젯의 속성은 크게 Brush 구조체와 Color and Opacity 구조체가 있어요.

7. Get SampleImage 노드의 핀을 뽑아서 Get Brush 및 Get Color and Opacity 노드를 만드세요.

8. 각각의 아웃풋 핀을 우클릭 한 뒤에 Promote to Variable 을 선택해서 변수를 만드시고, 이름 및 노드 망을 아래와 같이 구성하세요.

샘플 이미지의 속성을 다 저장했으니 샘플 이미지는 삭제해주겠습니다.

9. 다시 SampleImage의 Get 노드를 만들고 Remove from Parent 노드를 찾아서 연결하세요.

여기까지가 생명력 위젯을 만들기 전 사전 작업이에요. 샘플의 속성을 저장하고, 샘플을 지운다.

10. For Loop 노드를 연결하세요.

For Loop 노드는 같은 작업을 반복할 때 사용하는 노드에요. 그리고 반복 횟수는 First Index와 Last Index로 정해져요. 좀 더 정확하게는

(Last Index - First Index + 1)번 반복해요.

11. InitialLife의 Get 노드와 Integer - Integer(빼기) 노드를 연결하세요. 빼주는 값은 1을 넣으세요. 아웃풋 핀은 For Loop 노드에 연결하세요.

이렇게 해야 원하는 개수만큼 생명력 만드는 작업을 반복할거예요.

12. Construct Object from Class 노드를 만들고, Class는 Image로 설정하세요.

실시간으로 이미지 위젯을 만드는 노드에요. 반환값으로 만들어진 이미지를 전달해줍니다.

13. Get a reference to self 노드를 만들어서 아래와 같이 노드를 구성하세요.

Loop Body에 Construct Image 연결

 

14. Construct Image 노드의 Return Value 핀을 뽑고 Set Brush / Set Color and Opacity 노드를 만드세요. 그리고 각 노드에 IconBrush 및 IconColor 변수를 입력값으로 연결하세요.

15. HorizontalBox(_숫자) 변수를 Get 노드로 불러온 다음 핀을 뽑고 AddChild 노드를 만드세요.

16. 실행핀을 연결하고 Content 핀은 Construct Image 노드의 Return Value에 연결하세요.

17. 노드망을 전체적으로 확인한 후 Compile & Save 하세요.

이제 InitialLife 변수의 Default Value 로 설정한 값 만큼 생명력이 만들어질거예요.

 


# PreConstruct 이벤트 활용하기

   막간을 이용한 팁

 

위젯 블루프린트에는 Construct 이외에 PreConstruct 라는 이벤트가 있어요. 이 이벤트를 사용하면 실행시간에 만들어져야될 위젯을 미리 볼 수도 있습니다.

1. LifeBox 위젯 블루프린트의 Construct 이벤트노드를 PreConstruct로 바꾸세요.

2. InitialLife의 값에 따라 생명력 아이콘이 생기는 것을 확인하세요.

InitialLife = 2

 

PreConstruct 이벤트를 사용할 때는 외부 데이터를 취급하는 작업을 포함하면 안돼요.

 

 


# 이번 장 마무리

 

이제 우리는 간편하게 원하는 만큼 초기 생명력 개수를 정할 수 있어요.

또 게임 내에서 색 조합에 실패 했을 때 생명력 감소 및 콤보 초기화 패널티를 주게 되었습니다.

다음 장에서는 생명력이 다 소진됐을 때 게임이 종료되는 로직을 만들어 볼 예정이에요.

그럼 다음 장에서 만나요~