2009년 05월 31일
[워3 에디터 강좌] 변수의 기초

변수란 무엇인가?
변수(variable, 줄여서 var)란 말그대로 '변할 수 있는 수'이다. 게임뿐 아니라 어떤 프로그램이든, 일정한 데이터를 저장해둘 필요가 있고 또 그 값은 경우에 따라서 변경될 수 있으며 필요할 때 꺼내서 써먹어야 한다. 이를 위해서 프로그래밍에서는 필요한 데이터에 이름을 붙여서 저장해두는 것이다.
이론이 너무 길면 지루하므로 대강 이정도만 알아두고 바로 워3 에디터에서 변수를 생성하고 활용해보도록 하자. 우선 예제맵을 다운로드 받아서 에디터를 통해 연다.
▶예제맵 다운로드: TriggerEX_07.w3x
예제맵을 보면, 맵 우측 하단에 닭과 토끼들이 몇 마리 있을 것이다. 만약 플레이어가 닭을 잡을 때마다 몇 마리를 잡았는지 화면에 나타나게 하려면 어떻게 해야 할까? 우선 필요한 것은 닭이 죽을 때마다 숫자를 세어야 하고 또 그 숫자를 저장해 두어야만 한다. 그리고 그 숫자를 화면에 출력하면 된다.
이를 위해서는 변수가 필요하다. 변수를 만들려면 트리거 에디터 상에서 Ctrl + B를 눌러 변수창을 연 다음 Ctrl + N을 눌러 새로운 변수 만들기를 선택한다. 그러면 아래 그림과 같이 변수를 생성하는 창이 열리는데, 변수 이름에는 ChickenKilled 와 같이 의미를 알아보기 쉬운 이름을 넣고, 변수 종류는 정수 (integer)로 선택한다. 그런데 왜 변수 종류를 정수로 해야 할까? 이 변수값은 닭을 죽인 수를 저장하는 것이므로, 0에서 시작해서 1, 2, 3, 4, 5...와 같은 식으로 정수값만 존재할 수 있다. (닭을 반만 죽이거나 0.2 만큼만 죽일 수는 없기에) 그래서 정수형태로 데이터를 저장하는 것이다. 그리고 초기값은 기본값인 0으로 내버려두면 된다. 왜냐하면 처음에는 한 마리도 죽이지 않은 상태이기 때문이다.



우선 죽은 닭의 수를 세는 액션을 만들어보자. 닭이 몇 마리나 죽었는지를 기록하기 위해서 우리는 조금전에 변수를 하나 만들어놓았었다. 그리고 그 값은 일단 0인 상태다. 이 액션에서 해야할 일은 그 값에 +1을 해주는 것이다. 일단 새로운 액션 만들기를 해서 일반 카테고리에 있는 전역변수 설정을 선택한다. 그러면 아래와 같은 창이 나타날 것이다.
[참고] 변수는 크게 전역 변수와 지역 변수 두 가지로 구분 할 수 있는데, 프로그래밍 강좌가 아니므로 그런 것이 있다는 정도만 알아두고 넘어가도록 한다.

우선 정답부터 말하자면 (변수명) = (변수명) + 1 과 같은 식으로 설정해야 맞다. 아마 프로그래밍을 전혀 공부한 적이 없는 사람이라면 여기서 조금 의아해 할 수 있다. 이것을 수학 공식처럼 받아들이면 말도 안되는 일이기 때문이다. 처음에 변수의 초기값을 0으로 해놓았는데, 저 공식대로라면 0 = 0 + 1 이 되어 버린다. 하지만 이것은 겉보기와는 달리 수학 공식이 아니다. 프로그래밍에서 말하는 변수의 선언이다. 즉 변수의 값이 변수 값 더하기 1이라는 뜻이 아니라, 변수의 원래 값에 1을 더한 다음 그 결과값을 변수에 저장한다는 뜻이다.
만약 이 강좌에서 설명한대로 변수 이름을 ChickenKilled로 했다면, ChickenKilled = ChickenKilled + 1 과 같은 형태가 되어야 한다. 그리고 이 뜻은, ChickenKilled라는 이름의 변수에 원래 저장되어 있는 값에다가 1을 더한 다음, 그 결과값을 원래 있던 값 대신에 ChickenKilled라는 변수에 저장한다는 얘기다. 이렇게 하면 ChickenKilled라는 변수는 처음에 0 이었다가 닭이 죽을때마다 1씩 더해진 값으로 변경되어 저장된다.
그러면 트리거 에디터에서 이것을 어떻게 설정할 수 있을까? 전역 변수 설정의 액션 텍스트 '전역 변수 ChickenKilled의 값을 값(으)로 설정합니다' 에서 값을 클릭하면 아래 그림과 같은 창이 나타난다.



그러면 이번에는 이 변수값을 화면에 출력시키는 액션을 만들 차례다. 화면에 일정한 메세지를 표시하는 방법은 여러가지가 있지만 여기서는 가장 간단한 방법을 우선 해보도록 한다.
새로운 액션 만들기에서 퀘스트 카테고리를 선택한 다음, 퀘스트 메시지 출력을 고른다. 그러면 액션 텍스트가 (모든 플레이어 그룹)에게 퀘스트 갱신 형태로 메시지(을)를 출력합니다로 나타난다. 맨 앞에 있는 (모든 플레이어 그룹)은 메시지를 누구에게 보여줄 것인지를 고르는 항목이고, 퀘스트 갱신 형태로... 부분은 메시지 출력 형식을 고르는 항목이다. 여러 가지 형식이 있으니 나중에 직접 바꾸어 가며 해보도록 하고, 여기서 중요한 것은 출력할 메시지를 지정하는 일이다.
액션 텍스트에서 메시지를 클릭하면 아래 그림과 같이 문자열 창이 나타난다. 만약 특정한 어떤 문자열(텍스트)를 나타나게 하고 싶으면 값(A): 항목에 원하는 텍스트를 적어넣으면 되는데, 여기서는 변수를 출력시켜야 하므로 함수(F): 문자열 연결 항목을 이용해야 한다.




예를 들어, 정수 형태로 저장된 '25'라는 수는 수학적 계산을 하는데 활용할 수 있지만, 문자열 형태로 저장된 '25'는 '이십오'가 아니라 '2'라는 글자와 '5'라는 글자가 나란히 있는 것일 뿐이므로 계산을 할 수 없다. 정수값 25에 10을 더하면 결과가 35가 되지만 문자열 25에 10을 더하면 '2510'이 된다. 그리고 이것은 '이천오백십'이 아니라 2, 5, 1, 0 이라는 문자의 나열일 뿐이다.
그러면 이제 지도 시험을 눌러서(Ctrl + F9) 테스트 플레이를 해보자. 트리거가 제대로 설정되었다면 아래 스크린샷처럼 닭이 죽을때마다 메시지가 화면에 표시될 것이다.

오늘의 핵심 포인트
- 변수는 데이터를 저장해두는 상자 같은 것이다.
- 변수의 종류는 저장할 데이터의 형식을 나타낸다 (정수, 실수, 문자열 등)
- 변수에 어떤 값이 들어있던 상관 없이 변수의 이름만 불러오면 들어있는 데이터를 꺼내 쓸 수 있다
- 변수를 선언하면 선언된 값으로 바뀐다
- 화면에 변수를 출력하려면 반드시 문자열로 변환해야 한다 (정수나 실수 형태의 값은 그대로 화면에 출력할 수 없다)
# by | 2009/05/31 21:26 | ▶ War3 Editor 강좌 | 트랙백 | 덧글(7)







☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]