전략게시판

전략게시판 [스튜디오]
[루아스크립트] #3 기초 루아 문법
2021.02.19 16:46 조회 : 4065
Lv. 404토게피 CosyClimbing 작성자 게시물 더보기

루아스크립트도 결국 '루아' 라는 프로그래밍 언어를 사용하기 때문에,
루아의 문법을 맞추어 작성하여야 스크립트가 오류 없이 잘 작동합니다.

이번 편에서는 루아 스크립트를 짜기 위해 알아야 하는
최소한의 루아 문법에 대해 알아봅시다.

이 글의 대부분의 내용은 루아 메뉴얼을 참고하여 작성되었습니다.
링크를 달아놓을테니, 읽고 싶으신 분은 들어가서 읽으시면 도움이 많이 될 것입니다.
링크 : https://www.lua.org/manual/5.1/manual.html#5.5



3 - 1. 필수 문법

1. 함수 선언

루아스크립트는 어떠한 사건이 발생하면 '이벤트 콜백' 이라고 불리는 함수를 호출하여
해당 함수에 들어있는 명령을 수행하는 방식으로 동작하기 때문에, 올바른 함수 선언 방법을 알고 있어야 합니다.

함수 선언의 문법은 다음과 같습니다.


function 이라는 단어로 시작해 함수 선언을 시작합니다.

FuncName에는 임의의 함수 이름이 들어갑니다.

괄호 안 Param에는 함수에서 쓰일 변수가 들어갑니다. 쉼표(,)를 통하여 한개 이상의 변수를 받을 수 있습니다.

FuncBody에서는 함수가 호출되었을때 실행할 동작이 들어갑니다.
FuncBody의 내용이 달라지면 함수가 실행하는 동작이 달라질 것입니다.

함수가 끝나면 end를 집어넣어 함수의 끝을 맺습니다.

전 편에서 보았던 예제를 보며 분석해봅시다.



function 옆 Game.Rule:OnPlayerSpawn이 FuncName 부분에 들어가 있습니다.
따라서 해당 함수의 이름은 Game.Rule:OnPlayerSpawn임을 알 수 있습니다.

함수 이름 옆 괄호 안 Param 부분에 player가 들어가 있습니다.
따라서 해당 함수는 player 라고 불리우는 하나의 변수만을 가져와 사용한다는 것을 알 수 잇습니다.

FuncBody 부분에 적혀있는 player.maxhealth = 32767이 있습니다.
따라서 Game.Rule:OnPlayerSpawn 함수가 호출되면
"player.maxhealth = 32767" 이라는 명령이 실행될 것이라는 것을 예측해볼 수 잇습니다.



2. 조건문 : if 문

보다 완성도 있는 스크립트를 짜기 위해서는 수많은 조건들을 통하여
플레이어별로 적재적소에 알맞은 행동을 하도록 유도하여야 합니다.

if문의 문법은 다음과 같습니다.


Exp1, Exp2, Exp3에는 판단하고자 하는 조건식이 들어갑니다.
등호와 부등호가 쓰이는 식 (= , >, <, >= , <= , == , ~=)이 대표적인 조건식입니다.

Body1, Body2, Body3에는 위의 조건식이 참일 때 실행할 명령이 들어갑니다.

맨 처음 조건을 검사할 때는 if, 추가적인 조건을 검사할 때는 elseif, 모든 조건이 거짓이라면 else를 실행하게 됩니다.
Exp1 이 참이라면 if 부분에 있는 Body1을 실행합니다.
Exp1 이 거짓이고, Exp2 가 참이라면, elseif 부분에 있는 Body2를 실행합니다.
Exp1 과 Exp2 모두 거짓이라면, else 부분에 있는 Body3을 실행합니다.

if 문이 끝나면 end를 집어넣어 문장의 끝을 맺습니다.

아래는 if 문을 활용한 예제입니다.


if 문의 조건식이 참일 때, 다시 말해 플레이어의 진영이 테러리스트라면,
if 문 아래의 명령문을 따라 플레이어의 모델을 좀비로 바꿉니다.

if 문의 조건식이 거짓일 때, 다시 말해 플레이어의 진영이 테러리스트가 아니라면,
모든 조건식이 거짓이므로, else 아래의 명령문을 따라 플레이어의 모델을 기본모델로 바꿉니다.


3. 반복문 : for 문

스크립트를 짜다보면 같은 명령을 반복하여 실행해야 하는 일이 생깁니다.
이럴 때 for 문을 사용하면 가독성이 향상되며, 수정이 편리해집니다.

for 문의 기본적인 문법은 다음과 같습니다.



for 이라는 단어로 시작해 반복문을 시작합니다.

ParamName에는 변수의 이름이 들어갑니다. ParamName에는 은 for문 안에서도 사용이 가능합니다.

Num1은 ParamName의 초기값이 들어갑니다.
Num2은 for 문이 언제 끝날지 설정하기 위한 기준값이 들어갑니다.

IterBody는 Num1, Num2에 의해 정해진 횟수만큼 반복 실행될 내용이 들어갑니다.

for 문이 끝나면 end를 집어넣어 문장의 끝을 맺습니다.

아래는 for 문을 활용한 예제입니다.


플레이어를 제어하기 위한 배열을 1번 플레이어부터 24번 플레이어까지 미리 만들어두는 부분입니다.
1번부터 24번까지 배열을 하나하나 채우는것보다
for문으로 채우는 것이 훨씬 보기가 좋은 것을 확인할 수 있습니다.



3 - 2. 기타 문법

지금부터 설명할 문법은 몰라도 스크립트를 짤 수 있지만,
스크립트의 가독성과 테스트를 하는데 큰 도움이 되는 요소입니다.

1. 주석

주석(Comment)은 말 그대로, (스크립트 상으로) 아무런 의미 없는 코멘트를 달 수 있는 기능입니다.
주석 자체는 아무런 기능을 하지 못하지만, 자신이 짜온 스크립트에 대한 설명을 달아놓아서
지금 자신이 짜고 있는 스크립트가 무엇인지, 무슨 일을 해야하는지 적어놓는다면 스크립트를 짜는데 도움이 많이 됩니다.


-- 으로 줄 단위 주석을 시작할 수 있으며,
--[[ 으로 블럭 단위 주석을 시작할 수 잇습니다.
블럭 단위 주석은 ]]으로 닫아주어야 합니다.



2. print 문

print문을 사용하면 카스온라인 콘솔에 원하는 글귀를 적어넣을 수 있습니다.
그냥 하고 싶은 말들을 적어도 되고,
동작해야하는 명령 뒤에 적어놓아서 스크립트가 원하는 동작을 하고 있는지,
현재 전달되고 있는 값이 정확한 값인지 확인하는 용도로도 쓸 수 있습니다.


큰따옴표로 묶어서 출력하면 따옴표 안의 문자열을 출력하며,
큰따옴표 없이 출력을 하면 해당 이름을 가진 변수의 값을 출력합니다.



3. 들여쓰기

적절한 들여쓰기는 코드의 가독성을 높여주기 때문에
적절하게 들여쓰기를 하는 습관을 기르는 것이 좋습니다.


보통 함수, 조건문, 반복문이 여러번 중첩되었을 때 들여쓰기를 한다고 생각하시면 됩니다.



어쩌면 이 부분이 가장 어려운 부분이 되겠습니다.
4편에서는 지금까지 배운 것을 토대로 API를 참고하며 직접 루아스크립트를 짜보겠습니다.

감사합니다.






추천 : 6
댓글을 남기시려면 로그인 해주세요
댓글 : 6
  • 혹시 예제 따라해봤는데 3번째 줄 오류가 나서 토게피님꺼 오류그거 확인하면서 했는데 안되는데 어떻게 해야하나요? ㅜㅜ Lv. 1KimChunSik01 2023.06.27
  • 자바 배우던 기억이 새록새록.. 으악 머리야 Lv. 351그타 2021.06.02
  • 오개 수정완료 Lv. 405토게피 2021.02.19
  • Lv. 282버니덥카배울래 2021.02.19
  • end쓰는법이 빠졋군요 Lv. 54WeirdJumps 2021.02.19
  • 여기서 소개하지 못한 문법도 많고, 솔직하게는 for, if만으로만 짜는게 더 힘들수도 있음...그래도 불가능한 것은 아니니 다들 화이팅 Lv. 404토게피 2021.02.19