[워3 에디터 강좌] 변수의 활용 by storm

지난 강좌에 이어 이번에는 변수를 활용하는 방법에 대해서 알아보도록 한다. 지난 예제맵에서는 플레이어가 닭을 죽이면 몇 마리를 죽였는지 숫자를 세서 화면에 출력하는 것까지 만들었었다. 이번에는 플레이어가 닭을 일정수만큼 죽이면 보스 닭(!)이 나오는 트리거를 짜보자. 이런 경우 이벤트/조건/액션은 어떻게 될까?
▶예제맵 다운로드: TriggerEX_08.w3x

일단 액션은 보스 닭을 일정한 지점에 생성시키는 것이다. 그러면 조건은 무엇일까? 죽은 닭의 마리수가 일정 수에 만족하는지를 비교해봐야 한다. 예를 들어 닭 5마리가 죽었을 때 보스 닭이 등장하도록 설정한다면, 정수 비교를 써서 (죽은 닭의 수) == 5 와 같은 식으로 조건을 설정하면 된다. 그럼 마지막으로 이벤트는 어떻게 해야 할까?

보통 초보자들이 이벤트를 설정할 때 시간 카테고리에 있는 '일정 시간마다 작동'과 같은 이벤트를 써서 매 1초마다 조건을 따져보는 식의 트리거를 짜는 경우가 많다. 물론 이렇게 해도 실제 플레이에서는 잘 돌아간다. 하지만 굳이 일정 시간마다 조건을 따져봐야 할 이유가 있을까? 어차피 조건에서 비교하는 것이 죽은 닭의 마리수이기 때문에 닭이 죽을 때에만 조건을 따지면 그만이다. 그리고 이렇게 하는 것이 트리거로 하여금 불필요한 작업을 하지 않게 하기 때문에 더 최적화된 방법이다. 특히 실제 개발에서는 더욱 이러한 최적화에 신경을 써야 하므로 게임 기획 지망생이라면 이렇게 습작으로 트리거를 설정할 때에도 이런 점을 고려하는 습관을 들이는 것이 좋다.

그러면 방금 살펴본 바대로 트리거를 직접 짜보도록 하자. 트리거 에디터에서 Ctrl + T를 눌러 원래 있던 트리거 아래쪽에 새로운 트리거를 하나 만들고 다음과 같이 이벤트/조건/액션을 집어 넣는다. 트리거 이름은 Boss Chicken 정도로 해두면 된다.

  • 이벤트: 유닛 - 특정 플레이어의 유닛이 특정 상태가 되면 작동
    플레이어 2 (파란색)의 유닛이 죽음이 되면 작동합니다.

  • 조건: 정수 비교
    ChickenKilled == 5

  • 액션: 유닛 - 유닛 특정 각도로 한다
    1명의 보스 닭플레이어 2 (파란색)의 소유로 (farm <생성>의 중심)에 생성한 후 기본 건물 방향을 향하게 설정합니다.
    * 보스 닭 유닛은 중립 | 사용자 정의 | 마을 항목에 있다
    * farm 구역은 예제맵에 이미 만들어져 있다. (닭들이 출몰하는 지역)
여기서 중요한 것은 조건 부분에서 죽은 닭의 마리수를 저장해 두는 변수 ChickenKilled == 5 라는 항목이다. 지난 강좌에서만들었던 트리거에서 닭이 죽을 때마다 ChickedKilled 라는 정수형 변수의 값을 +1씩 증가시키도록 설정했기 때문에 이 변수값이 5인지 아닌지만 비교하도록 조건을 잡아놓으면 닭이 5마리 죽었을 때 보스 닭을 등장시킬 수 있는 것이다.



자, 설명대로 트리거를 잘 만들었다면, 닭에게 '사랑의 맴매'를 마구 때려서 ' -')/ 닭을 5마리째 죽이면, 밭의 중앙에서 빨간색의 보스 닭이 등장할 것이다. 하지만 플레이를 해보면 문제점이 한 가지 나온다. 보스 닭을 죽이면 또 보스 닭이 반복해서 나오는 것이다. 왜 그럴까?

방금 만든 트리거를 보면 플레이어 2 소속의 유닛이 죽으면 이벤트가 발동해서 조건을 따져보게 되어 있다. 그런데 보스 닭 역시 플레이어 2 소속이므로 보스 닭이 죽어도 이 트리거가 조건을 따져보는 것이다. 그러면 조건은 무엇이었나? ChickenKilled 라는 변수가 5와 같은지를 비교하는 것이다. 그리고 이 변수는 일반 닭이 죽을 때에만 수치가 +1씩 증가하도록 설정되어 있기 때문에 보스 닭이 죽을 때는 변수의 값이 바뀌지 않고 그대로 유지된다. 따라서 일반 닭을 5마리 죽여서 ChickenKilled == 5 인 상태에서 보스 닭을 죽여도 이 값이 그대로 5로 남아있기 때문에 보스 닭이 죽으면 Boss Chicken 트리거가 또 보스 닭을 생성시키는 것이다.

이 문제를 해결하는 가장 간단한 방법은 Boss Chicken 트리거의 액션에 트리거 - (현재 트리거)를 사용 중지합니다 라는 액션을 추가하면 된다. 이 액션은 트리거 카테고리 - 트리거 사용 중지에서 찾을 수 있다. 이 액션을 넣으면 이 트리거는 단 한 번만 실행되고 더 이상은 실행되지 않으므로 보스 닭은 처음 한 번만 등장한다.

이렇듯 워3 에디터로 맵을 만들 때 맵에서 설정한 변수는 어느 트리거에서든 가져다 쓸 수 있다. 변수를 선언하는 것은 액션에서 하고 변수가 일정 조건을 만족하는지 여부는 조건에서 따져보면 된다. 그러면 이어지는 강좌에서 변수를 보다 다각적으로 활용하는 방법에 대해서 알아보도록 하자.

▶완성된 예제맵 다운로드: TriggerEX_08done.w3x


덧글

  • 마제스트 2009/06/09 23:06 # 답글

    감사합니다 빨리 해보고 싶네요 ^^ 목표는 주말! 감사히 배우고 있습니다.
  • 마제스트 2009/06/14 06:22 # 답글

    새벽부터 기상~ 해서 일요일의 시작을 스톰님의 워3강좌와 함께 합니다. 감사히 배워갑니다.
  • storm 2009/06/14 13:10 # 답글

    마제스트// 잘 만들고 계시죠? 언제 맵한번 메일로 보내주세요 아니면 저희 카페에 올려셔도 되구요
  • ATree 2009/08/23 17:20 # 삭제 답글

    매번 에디터 공부를 맡치고 나서 제 나름대로 응용해서 복습을 하곤하는데요. 저번강좌중 오거 두마리 생성되는거에서 오거 두마리가 죽었을때, 오거멀더 1마리만 등장하도록 응용해 봤었습니다. 오거멀더 1마리만 나오는게 아니라 오거가 죽을때마다 오거멀더가 계속 생성 되더라구요.. 어떻게 수정을 할까 고민 했는데(물론 답은 여기에 있었지만 미리보면 공부가 안되니.. 날샜네요;;) 하지만 여기서 그 의문점이 풀려버렸네요!!! 하하하 얼른 다음강좌가 기대됩니다!! 스톰님 화이팅!!
  • .... 2009/10/24 21:54 # 삭제 답글

    저기....닭을 계속 만들려면 어떻게 해야돠요?
    부탁드립니다.
  • .... 2009/10/24 22:38 # 삭제 답글

    닭을 다시 소생시키려면 어떻게 해야되요?
  • storm 2009/10/24 22:59 # 답글

    보스 닭을 리젠시키려면

    이벤트: 특정유닛이 특정상태가 되면 작동 -> 유닛을 보스 닭으로

    조건: 없음

    액션: [일반 카테고리] 게임시간으로 대기 -> 게임시간으로 xx초 대기
    [유닛 카테고리] 유닛 특정각도로 한다 -> 보스 닭을 생성(위치와 각도 지정)

    이렇게 트리거를 만드시면 보스 닭이 죽은 다음 xx초 후에 다시 리젠됩니다.
댓글 입력 영역



통계 위젯 (화이트)

3017
177
502138