회사에서 클라이언트 팀에서 처음으로 세미나라는 것을 했다.
그때 발표를 할 때 내머리 속의 지우개가 있는 듯 했다.
그때 아직 3개월도 채 되지 않은 나이기에.... 음. 다시 생각 해보니 지금은 3개월 하고 일주일이 넘었군...
아무튼 그때 발표할 때 썼던 문서를 다시 정리 해 보겠다. 귀찮아서... 대충만... ㅡ.,ㅡ;;
완전 허접하지만 이뿌게 봐주시길...

* 스크립트란?
 초기 스크립트언어는 일련의 반복적인 명령들을 일종의 명령 처리기에 집어넣는 수단이었다.
이가 발전 함에 따라서 용도가 변하여 빠른 개발을 위해 쓰이며 비 프로그래머가 읽고 쓰기 쉬운 텍스트 기반 구문을 채용하는 도구로 변모하였다. 
일정한 지식을 갖춘 사용자라면 프로그래머의 개입 없이도 스스로 스크립트를 작성하고 사용할 수 있다.

* 루아란?
 루아는 “접착제(glue)” 언어라는 점에서 위의 스크립트언어와 차별된다. 
기존의 스크립트 언어들은 반복적인 작업을 처리하는 용도지만 루아는 사용자가 다른 언어의 기능과 공정을 함께 “접착해서” 통합하기 위한 도구로 만들어진 것이다. 
이런 방식은 단순히 명령들을 수행하는 것 이상의 일을 할 수는 강력한 도구이다.

* 루아의 장단점
- 장점
루아는 애초부터 좀 더 큰 응용 프로그램에 내장 시킬 것을 목적으로 고안된 언어이기에
확장성이 크다. 루아와 C언어의 통신이 쉬우며 기술적 설계안에서 구현하기 비교적 쉽다.
루아는 작고 빠르며 이식성이 뛰어나다. 이 말인즉 실행시점 메모리 사용량 측면에서 부담이 적고, C보다는 느리지만 파이썬과 같은 언어보다 빠르다. 
그리고 새로운 하드웨어로 옮긴다해도 큰 수정없이 가능하다.

- 단점 
루아는 파이썬에 비해 지원 라이브러리가 부족하다.
루아에 대한 소개자료가 아직은 부족한 편이다.
단독 실행 인터프리터로서 사용하기에는 빈약하다.

* 루아가 게임 개발에 적합한 이유
- C++과 연동이 잘되며 C++을 이용해서 확장할 수 있다.
- 확장성이 뛰어나 기술적 설계안에서 구현하기 쉽다.
- 작고 빠르며, 이식성이 뛰어나다.
- C를 접해본 사람이라면 배우기 쉽다.
- 그리고 무료이다.

* 루아의 사용처
- 게임내의 UI를 제작
 UI는 루아를 이용하여 조작할 수 있고 유저가 루아를 통해서 UI로 커스텀마이징 가능하다.
- 게임의 자료의 정의, 저장, 관리
 데이터 주도적 설계를 할 수있다. 모든 객체의 매개변수와 특성을 정의하여 하드 코딩을 통한 구현보다 외부 데이터로 관리하는 편이 데이터 수정이나 추가면에서 많은 이득을 볼 수있다.
- 실시간 게임 사건들의 관리
 일반적으로 게임 내부에서 상호작용간에는 이벤트가 발생하는데 , 이러한 것을 관리 할 수있다.
- 게임의 인공지능 시스템을 작성
 인공지능을 루아로 제어가 가능하다. 이를 이용하여 스크립트 작업자가 프로그래머 없이 작성이 가능하고, 이후에 유저가 직접 AI를 구성할 수 있다.


* 루아 스택이란?
- 루아는 C에서 사용하는 메모리 공간과는 별도의 메모리 공간을 사용을 하는데
이를 스택이라고 부른다. 스택은 루아의 명령 및 변수등의 데이터를 저장하고 있다. 
이 스택은 아래에서 부터 쌓여 나가며 이에 접근하기 위해서 인덱스를 사용하고 있는데
인덱스는 문자열을 이용하여 인덱스로 변환을 해서 사용을 한다. ( 이 부분은 뒤에 자세한 설명 )







에구... 연신 붙여넣기 하면서 귀찮은 부분은 않했는데...
나중에 다시 작업 하겠습니다.

흐미... 몇일 지나서 하는거야... ㅡ.,ㅡ;;;

현재 되는 기능을 나열 해보겠다.
나열하기 전에 용어에 대해서 정의를 하고 넘어 간다.
C는 우리가 작업을 하는 C, C++을 통합적으로 말하는 것이고 당연히 닷넷등의 컴파일러상의 언어를 말한다. 
루아는 루아문법을 말한다. 
값( Value )은 Value 즉 포인터가 아닌 실제 값을 말한다.

1. C 와 루아간의 함수 호출
  C함수를 루아스택에 등록을 하고 루아 함수를 C에서 호출 가능하고
2. C 와 루아간의 Value를 주고 받을 수 있다.
3. C의 클래스를 루아 스택에 등록을 한다.
4. 루아 스택에 등록이 된 C 클래스의 인스턴스 포인터를 넘겨서 
   루아 스택에서 바로 조작이 가능하다. 

개인적으로 4번이 가장 유용하고 많이 쓰이는 것 같다. 
언리얼 엔진은 메인 뷰어를 두고 밑에 에디트 창을 통해서 메인 뷰어( 게임 화면 )의 객체를 조잘 할 수 있다고 한다.
현재 작업은 그런식으로 가능하게 되는데 상당히 유용한 듯하다.
이번주에 작업을 해서 화면의 싸이즈를 변경한다 든지 백그라운드 색상을 바꿀수 있는데 
어찌나 좋던지...^^ㅋㅋㅋㅋ

앞으로는 AI와 UI의 이벤트 처리를 해볼 것이다. 
다른 사람들은 어떻게 사용하는지 모르겠지만 어째든 유용하게 사용하고 있는듯 하다.

루아 스크립트 문장을 콘솔에서 간단히 돌려보는 방법은

 

첨부 파일에 포함된 파일

 

/*

bin2c5.exe

 

lua5.exe

 

luac.exe

*/

 

위의 세 가지 이다. 위의 세 파일을 C:\WINDOWS  또는  C:\WINDOWS\system32 폴더안에 넣고 Editplus, Acroedit 와 같은 에디팅 프로그램에서 lua5.exe 파일을 사용자도구로 설정을 해 놓으면 간단히 루아 스크립트 문장을 실행해 볼 수 있다.

 

                                        < Editplus 에서 사용자 도구 설정 화면 >

메뉴에서 [도구] 탭을 보면 실행 바로 가기 키를 확인할 수 있다.

 

print("출력 테스트")

 

다음과 같이 문장을 입력하여 확장자를 lua 파일로 저장하고 실행해 보면 콘솔 화면에서 문자열이 출력 되는것을 볼 수 있다.

 

 

 

 

(※ 레퍼런스 매뉴얼을 보고 마음대로 해석하여 공부한 것이니 잘못 된 부분이 있을지도 모릅니다. 잘못된 부분 있으면 가르쳐주시면 감사하겠습니다. ^^; )

 

 

루아의 문자열은 문자와 숫자, 언더바로 구성할 수 있으며 처음을 숫자로 시작할 수는 없다.

 

루아의 예약어는 다음과 같은 것들이 있다.

 

and break  do  else  elseif   
end  false  for  function  if   
in  local  nil  not  or   
repeat  return  then  true  until  while 

 

 

대 소문자를 구분하므로 And 와 AND 는 다르게 구분된다.

 

_ (underbar) 로 시작하여 대 문자가 적힌것은 예약된 내부의 변수이다. (예 : _VERSION)

 

 

그 외의 토큰들에는

 

+    -    *   /    ^    =      ~=     <=      >=        <         >         ==       (        )         {       }

 

[   ]        ;    :      ,     .     ..     ...

 

문자열은  두 개의 ' (single quotation mark)  " (double quotation mark) 안에 들어가야 하며 C언어 같은 이스케이프 시퀀스가 사용된다.

 

 

\a    ㅡ    경보음 (bell)

\b    ㅡ    백스페이스 (backspace)

\f    ㅡ     폼 피드 (formfeed)

\n    ㅡ    개행     (newline)

\r    ㅡ     리턴     (Carriage return)

\t    ㅡ     수평 탭 (horizontal tab)

\v    ㅡ    수직 탭 (vertical tab)

\\    ㅡ   역 슬래쉬 (backslash)

\"    ㅡ     큰 따옴표 (double quotation mark)

\'    ㅡ     작은 따옴표 (single quotation mark)

\[   ㅡ      왼쪽 브라켓 (left square braket)

\]    ㅡ     오른쪽 브라켓 (right square breket)

 

 

문자열은  '   "   외에도  [[   ]]   안에 들어갈 수도 있다.

 

차이점은   '  나  "  는 여러 한 라인 내의 문자열만 가능하지만 [[   ]] 은 여러줄에 걸쳐 선언된 문자열도 가능하다는 것이다.

 

print("alo\n123\"")
print("\n")

print('\97lo\10\04923"')
print("\n")

str1 = [[alo
123"]]
print(str1)
print("\n")

str2 = [[
alo
123"]]
print(str2)

 

 

다음을 실행 해 보면 같은 문자열이 출력된다.

 

두 번째 출력에서 \10은 \n 으로 개행이 되고 \0 뒤의 49는 ASCII 코드 값인 1이 되어 출력이 된다.

 

 

숫자 상수는 10진 또는 16진수로 쓰여진다.

 

예) 3     3.0       3.14        3.1416e-2          0.31416E1

 

 

 

주석은  한 줄 주석을 달 때는 --   하이픈 두개 를 사용하고

 

여러 줄 주석을 달 때는   --[[   와   --]]  를 사용한다.

 

예)

 

-- 한줄 주석

 

--[[  여러

주석

--]]

+ Recent posts