3. 아이엠 그라운드 자기소개하기
• Python, Ruby같은 스크립트 언어
• 다른 스크립트 언어보다 가볍다.
• 프로그램에 내장되는 스크립트이다.
• 프로그램과 통신이 가능하다.
• 데이터 교환
• API 상호 호출
• C, C++언어에 이식하기 편하다.
• 가비지 컬렉터가 있다.
• 쉽다.
6. • 와우에서 루아 스크립트를 사용한다는 얘기는 이미 유명하다.
• 사용자 인터페이스 (UI)
• 캐릭터 애니메이션
• 월드맵 조정
• 네버윈터 나이츠, ToME, 원숭이 섬으로부터 탈출, 앵그리버드
등 ... 게임 제작에 많이 쓰임..!
게임 개발에 자주 쓰입니다!
27. • 루아의 변수는 기본적으로 전부 전역 변수이다.
• 스크립트 전체에서 접근 가능하며 끝날 때까지 유지된다.
• 지역변수는 ‘local’ 키워드를 사용하여 사용 가능하다.
• 가능한 곳에서는 지역변수를 사용하는 것이 좋다.
• ex)
• a = 2 // 전역변수
• local a = 2 // 지역변수
루아 - 변수
28. • nil
• 다른 언어의 NULL과 유사하다.
• 변수에 nil을 대입하면 삭제된다.
• boolean
• 다른 언어처럼 true, false 값만 가짐
루아 - 변수
29. • string
• 다른 스크립트 언어처럼 문자열 처리에 강하다.
• 역슬래시를 이용하여 특수문자 사용 가능 (줄바꿈, 탭, 따옴표 등)
• 수치와 문자열을 자동으로 상호 변환
• ex) “8”+8 -> 16, “8+8” -> “8+8”, “hello”+8 -> ERROR
• number
• 루아는 정수와 소수를 구분 하지 않고 모든 숫자를 실수형으로 처리한
다.
루아 - 변수
30. • table
• C++의 std::map, Python의 dict와 유사하다.
• number형과 string형을 모두 인덱스 할 수 있다. (nil은 제외)
• 크기가 고정되어 있지 않다. (Array가 아님)
• 값, 변수가 아닌 객체이다.
• 다른 언어와 달리 0이 아닌 1부터 시작한다.
루아 - 변수
31. • 산술 연산자
• +, -, *, /
• 관계 연산자
• <, >, <=, >=, ==, ~=
• 논리 연산자
• and, or, not
루아 - 연산자
32. • if (조건식) than (실행문)
else if (조건식) than (실행문)
else (실행문)
end
루아 – 명령문 (if)
34. • C++의 do ~ while과 유사
• repeat
(실행문)
until (조건식)
루아 – 명령문 (repeat)
35. • for (초기화), (조건식), (증감) do
(실행문)
end
• 증감을 생략하면 자동으로 1씩 증가
루아 – 명령문 (numeric for)
36. • table의 요소를 한 번에 하나씩 접근할 때 주로 사용
• pairs() / ipairs() 함수와 함께 사용
• ex)
• days = {“Sunday”, “Monday”, ... “Saturday”}
• for index, value in pairs(days) do
print(index, value)
end
• result)
• 1 Sunday
2 Monday
...
루아 – 명령문 (generic for)
38. • arg라는 table을 만들어서 가변 인수를 담음
• 가변 인수는 마침표 세개(...)로 구분
• arg.n에 가변 인수의 개수를 저장
• function 함수이름(a, b, ...)
print(a[1])
end
루아 – 함수
39. • 루아의 함수는 결과를 여러 개 반환 가능
• function 함수이름()
return 1, 2, “asdf”
end
루아 – 함수
40. 더 자세한 정보는
assert, dofile, math, tonumber, tostring, string., table.
등 다양한 기본 라이브러리 함수
41. assert, dofile, math, tonumber, tostring, string., table.
등 다양한 기본 라이브러리 함수
더 자세한 정보는
42.
43. • 환경은 Windows / Visual Studio 2013
• Visual Studio 프로젝트 Directory 설정
• Include
• C:Program FilesLua5.1include
• Link
• C:Program FilesLua5.1lib
• C:Program Files (x86)Lua5.1lib 디렉토리에서
dll파일 프로젝트에 복사
C++과 루아 스크립트 연동
49. • 역으로 Lua에서 C++ 함수를 호출 할 수 있다.
C++과 루아 스크립트 연동
50. • Lua를 좀 더 쉽게 연결할 수 있도록 도와주는 C++ 라이브러리
• MIT 라이센스
• boost 라이브러리가 필요하다.
• 설치
• http://sourceforge.net/projects/luabind/
• 압출을 푼뒤 빌드한다.
• 정적 라이브러리로 빌드 (Visual Studio 2013 기준)
• 이 과정에서 boost, lua 라이브러리 필요
• 디버그, 릴리즈 둘 다 빌드
• 나온 결과물을 프로젝트에 포함한다. (lib)
luabind
51. • 이제 사용하면된다.
• 자세한 사용 방법은 doc 디렉토리를 찾아보면 나와있다.
• 각종 example도 압축 파일 내부에 존재한다
luabind
52. 주의할 점
• 배보다 배꼽이 더 커질 수 있다.
• 컴파일 시간이 오래 걸리지 않는데도 무리해서 스크립트로 작성하다가
작업시간이 더 오래 걸릴 수 있음
• 스크립트에 대해서 잘 모른다면 C++에서 작성하는게 좋을 수
있다.
• 여러 C++의 함수를 Lua로 바인드하기 위해서는 시간이 들고 소스 코
드가 복잡해질 가능성이 있다.
• 디버깅이 어렵다.
• 전문 개발 툴이 없다.
• 로딩과 실행 속도가 느리다.
53. 주의할 점
• 배보다 배꼽이 더 커질 수 있다.
• 컴파일 시간이 오래 걸리지 않는데도 무리해서 스크립트로 작성하다가
작업시간이 더 오래 걸릴 수 있음
• 스크립트에 대해서 잘 모른다면 C++에서 작성하는게 좋을 수
있다.
• 여러 C++의 함수를 Lua로 바인드하기 위해서는 시간이 들고 소스 코
드가 복잡해질 가능성이 있다.
• 디버깅이 어렵다.
• 전문 개발 툴이 없다.
• 로딩과 실행 속도가 느리다.
제대로 사용하려면 팀원 각각의 역활 수행을 제대로 해야한다.
ex)
코어 프로그래머 -> 몬스터 FSM을 루아로 바인드함
컨텐츠 프로그래머, 기획자 -> 바인드된 함수를 이용하여 몬스터 AI 제작
http://www.gamedevforever.com/12
(박민근 교수님이 쓰신 루아 사용에 대한 비판 글)