2009년 06월 06일
[워3 에디터 강좌] 변수의 활용

▶예제맵 다운로드: TriggerEX_08.w3x
일단 액션은 보스 닭을 일정한 지점에 생성시키는 것이다. 그러면 조건은 무엇일까? 죽은 닭의 마리수가 일정 수에 만족하는지를 비교해봐야 한다. 예를 들어 닭 5마리가 죽었을 때 보스 닭이 등장하도록 설정한다면, 정수 비교를 써서 (죽은 닭의 수) == 5 와 같은 식으로 조건을 설정하면 된다. 그럼 마지막으로 이벤트는 어떻게 해야 할까?
보통 초보자들이 이벤트를 설정할 때 시간 카테고리에 있는 '일정 시간마다 작동'과 같은 이벤트를 써서 매 1초마다 조건을 따져보는 식의 트리거를 짜는 경우가 많다. 물론 이렇게 해도 실제 플레이에서는 잘 돌아간다. 하지만 굳이 일정 시간마다 조건을 따져봐야 할 이유가 있을까? 어차피 조건에서 비교하는 것이 죽은 닭의 마리수이기 때문에 닭이 죽을 때에만 조건을 따지면 그만이다. 그리고 이렇게 하는 것이 트리거로 하여금 불필요한 작업을 하지 않게 하기 때문에 더 최적화된 방법이다. 특히 실제 개발에서는 더욱 이러한 최적화에 신경을 써야 하므로 게임 기획 지망생이라면 이렇게 습작으로 트리거를 설정할 때에도 이런 점을 고려하는 습관을 들이는 것이 좋다.
그러면 방금 살펴본 바대로 트리거를 직접 짜보도록 하자. 트리거 에디터에서 Ctrl + T를 눌러 원래 있던 트리거 아래쪽에 새로운 트리거를 하나 만들고 다음과 같이 이벤트/조건/액션을 집어 넣는다. 트리거 이름은 Boss Chicken 정도로 해두면 된다.
- 이벤트: 유닛 - 특정 플레이어의 유닛이 특정 상태가 되면 작동
플레이어 2 (파란색)의 유닛이 죽음이 되면 작동합니다. - 조건: 정수 비교
ChickenKilled == 5 - 액션: 유닛 - 유닛 특정 각도로 한다
1명의 보스 닭을 플레이어 2 (파란색)의 소유로 (farm <생성>의 중심)에 생성한 후 기본 건물 방향을 향하게 설정합니다.
* 보스 닭 유닛은 중립 | 사용자 정의 | 마을 항목에 있다
* farm 구역은 예제맵에 이미 만들어져 있다. (닭들이 출몰하는 지역)


자, 설명대로 트리거를 잘 만들었다면, 닭을 5마리 죽였을 때 밭의 중앙에서 빨간색의 보스 닭이 등장할 것이다. 하지만 플레이를 해보면 문제점이 한 가지 나온다. 보스 닭을 죽이면 또 보스 닭이 반복해서 나오는 것이다. 왜 그럴까?
방금 만든 트리거를 보면 플레이어 2 소속의 유닛이 죽으면 이벤트가 발동해서 조건을 따져보게 되어 있다. 그런데 보스 닭 역시 플레이어 2 소속이므로 보스 닭이 죽어도 이 트리거가 조건을 따져보는 것이다. 그러면 조건은 무엇이었나? ChickenKilled 라는 변수가 5와 같은지를 비교하는 것이다. 그리고 이 변수는 일반 닭이 죽을 때에만 수치가 +1씩 증가하도록 설정되어 있기 때문에 보스 닭이 죽을 때는 변수의 값이 바뀌지 않고 그대로 유지된다. 따라서 일반 닭을 5마리 죽여서 ChickenKilled == 5 인 상태에서 보스 닭을 죽여도 이 값이 그대로 5로 남아있기 때문에 보스 닭이 죽으면 Boss Chicken 트리거가 또 보스 닭을 생성시키는 것이다.
이 문제를 해결하는 가장 간단한 방법은 Boss Chicken 트리거의 액션에 트리거 - (현재 트리거)를 사용 중지합니다 라는 액션을 추가하면 된다. 이 액션은 트리거 카테고리 - 트리거 사용 중지에서 찾을 수 있다. 이 액션을 넣으면 이 트리거는 단 한 번만 실행되고 더 이상은 실행되지 않으므로 보스 닭은 처음 한 번만 등장한다.

▶완성된 예제맵 다운로드: TriggerEX_08done.w3x
# by | 2009/06/06 20:51 | ▶ War3 Editor 강좌 | 트랙백 | 덧글(7)







☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
부탁드립니다.
이벤트: 특정유닛이 특정상태가 되면 작동 -> 유닛을 보스 닭으로
조건: 없음
액션: [일반 카테고리] 게임시간으로 대기 -> 게임시간으로 xx초 대기
[유닛 카테고리] 유닛 특정각도로 한다 -> 보스 닭을 생성(위치와 각도 지정)
이렇게 트리거를 만드시면 보스 닭이 죽은 다음 xx초 후에 다시 리젠됩니다.