[RPG MAKER MZ] 실시간 게이지를 게임 화면에 항상 표시하는 방법

[RPG MAKER MZ] 실시간 게이지를 게임 화면에 항상 표시하는 방법

지난 글

지난 글에서는 아래에서부터 차오르는 게이지를 만드는 방법에 대해 함께 알아보았어요. 이번 글에서는 그 게이지를 화면에 항상 보이도록 띄워두는 방법을 소개해 드릴게요. 이제 플레이어가 언제든 진행 상황을 한눈에 파악할 수 있도록 게이지를 게임 화면에 고정해 볼까요?

1. 공통이벤트 만들기 : 게이지 이미지를 화면에  띄우기

가장 먼저 할 일은, 게이지 이미지를 게임 화면에 띄우는 공통 이벤트를 만드는 거예요. 이 공통 이벤트는 맵이 바뀌어도 항상 화면에 표시되도록 설정할 거예요.

아래와 같이 공통 이벤트를 작성해요.

  • 이름 : 게이지바 띄우기
  • 작동 : 없음

    (이 공통 이벤트는 맵 이벤트에서 자동실행으로 호출할 예정이에요.)

  • 실행 내용 : 이벤트 명령 > 스크립트
Copy to Clipboard

지난 시간에 만들었던 게이지 이미지를 띄우는 코드를 먼저 넣어주세요.
그리고 그 아래에 스위치를 켜는 코드를 한 줄 더 추가 합니다.

Copy to Clipboard

여기서 n에 사용할 스위치 번호를 넣어주세요.

이 스위치를 켜는 이유는. 3번 단계에서 작성할 실시간으로 게이지를 갱신하는 공통 이벤트를 작통 시키기 위해서예요.

  • true는 스위치를 ON
  • false는 스위치를 OFF
게이지바 띄우기 공통 이벤트

2. 맵 이벤트 작성 : 공통 이벤트 자동 실행

이번에는 방금 작성한 공통 이벤트를 자동으로 실행해주는 맵 이벤트를 만들어줄게요.

맵 위에 아무 이미지도 없는 이벤트를 만들어 줍니다. 이 이벤트의 역할은 아주 간단해요. 공통 이벤트를 딱 한 번 실행하고, 자기 역할은 조용히 마무리하는 거예요.

  • 이름 : 게이지바 띄우기 자동 실행
  • 작동 : 자동 실행
  • 실행 내용 : 이벤트 명령 > 스크립트
Copy to Clipboard

먼저 공통 이벤트를 실행하는 코드를 입력합니다. 여기서 COMMON_EVENT_ID에 아까 만들었던 공통 이벤트 번호를 입력해주세요. (예: 5번이면 reserveCommentEvent(5) )

이제 이 맵 이벤트는 임무를 마쳤으니 더 이상 실행되지 않도록 꺼줄거예요. 아래의 코드를 써서 이 이벤트의 셀프 스위치 A를 켜주세요.

Copy to Clipboard

이 이벤트의 셀프 스위치 A를 켜주는 코드를 작성합니다.

  • this._mapId : 이 이벤트가 속해 있는 맵의 ID
  • this.eventId() : 이 이벤트 ID를 반환하는 함수
  • A :  셀프 스위치 A
  • true : 스위치 ON (false는 Off)
Auto-Run Map Event Display Gauge Bar 1
  • 출현 조건 : 셀프 스위치 A
  • 작동 : 결정 버튼
  • 실행 내용 : 없음
  1. 이벤트 페이지 새로 만들기 버튼을 눌러 새 이벤트 페이지를 만들어 줍니다.
  2. 출현 조건에서 셀프 스위치에 체크를 하고 A를 선택해 줍니다.
  3. 이 두 번째 페이지에는 아무 실행 내용도 넣지 않아야 해요.

그러면 셀프 스위치가 켜졌을 때 이 이벤트 페이지로 바뀌고 이벤트는 더 이상 작동하지 않게 됩니다.

게이지바 띄우기 자동 실행 맵 이벤트 셀프 스위치

3. 공통 이벤트 작성 : 게이지 바 작동 코드

이제는 화면에 고정된 게이지 바가 실시간으로 변하는 새로운 공통 이벤트를 만들어 볼 차례예요.

  • 이름 : 게이지바 작동

  • 작동 : 병렬 처리
  • 스위치 : 아까 만든 공통 이벤트 1번에서 켜줬던 스위치 번호

  • 실행 내용 : 이벤트 명령 > 스크립트

이렇게 하면 스위치가 켜졌을 때 이 이벤트가 백그라운드에서 계속 작동하게 돼요.

Copy to Clipboard
  1. 먼저 지난 시간에 만든 게이지 바가 비율에 따라 움직이게 하는 코드를 그대로 넣어 줍니다
  2. 그 다음 꼭 필요한 한 줄이 있어요.
Copy to Clipboard

마지막에 대기 코드를 넣어줘요. 대기를 넣지 않으면 프레임마다 계속 실행돼서 렉에 걸려요.

this.wait(n)에서 n은 프레임 수 입니다.

예시)

  • this.wait(60) → 1초 기다리기
  • this.wait(30) → 0.5초 기다리기
게이지바 작동 공통 이벤트

goal에 정수를 넣으면 작동하는데 변수를 넣으면 작동하지 않을때

let goal = $gameVariables.value(n1); 로 했을 때 작동하지 않는 이유는 변수 n1번이 아직 설정되지 않았거나 값이 0이기 때문이에요. rate = done / goal; 이 부분에서 goal이 0이거나 undefined이면, NaN 또는 Infinity가 발생하고, 그 뒤의 계산도 전부 무력화돼요. 그렇기 때문에 goal에 해당하는 변수를 먼저 지정하고나서 이 공통 이벤트의 병렬 처리를 하는 스위치를 켜줘야 제대로 작동해요.

전체 흐름 정리

  • 1
    게이지 이미지를 띄우는 공통 이벤트 작성
  • 2
    해당 공통 이벤트를 실행하는 맵 이벤트 만들기 (자동실행, 셀프스위치)
  • 3
    실시간으로 게이지를 갱신하는 공통 이벤트 작성하기 (병렬 처리+대기)

1. 게이지 이미지를 띄우는 공통 이벤트 작성

Copy to Clipboard

2. 해당 공통 이벤트를 실행하는 맵 이벤트 만들기 (자동실행, 셀프스위치)

Copy to Clipboard

3. 실시간으로 게이지를 갱신하는 공통 이벤트 작성하기 (병렬 처리+대기)

Copy to Clipboard

이제 플레이어가 무언가를 할 때마다, 게이지 바가 실시간으로 부드럽게 움직이는 걸 확인할 수 있을 거예요.