C++과 Lua script연동

55
C++ 과 Lua Script 과과과과 NHN NEXT 이이이

description

C++과 Lua script 연동

Transcript of C++과 Lua script연동

Page 1: C++과 Lua script연동

C++ 과 Lua Script연동하기NHN NEXT 이선협

Page 2: C++과 Lua script연동

넌 누구냐 ?!

Page 3: C++과 Lua script연동

아이엠 그라운드 자기소개하기

• Python, Ruby 같은 스크립트 언어• 다른 스크립트 언어보다 가볍다 .• 프로그램에 내장되는 스크립트이다 .• 프로그램과 통신이 가능하다 .• 데이터 교환• API 상호 호출

• C, C++ 언어에 이식하기 편하다 .• 가비지 컬렉터가 있다 .• 쉽다 .

Page 4: C++과 Lua script연동

너 뭐하는 애니 ?

Page 5: C++과 Lua script연동
Page 6: C++과 Lua script연동

• 와우에서 루아 스크립트를 사용한다는 얘기는 이미 유명하다 .• 사용자 인터페이스 (UI)• 캐릭터 애니메이션• 월드맵 조정

• 네버윈터 나이츠 , ToME, 원숭이 섬으로부터 탈출 , 앵그리버드 등 ... 게임 제작에 많이 쓰임 ..!

게임 개발에 자주 쓰입니다 !

Page 7: C++과 Lua script연동

널 왜 사용할까 ?

Page 8: C++과 Lua script연동

코딩 빌드기획 테스트

Page 9: C++과 Lua script연동

코딩 빌드기획 테스트

코딩량이 많아지면 ...

Page 10: C++과 Lua script연동

코딩 빌드기획 테스트

코딩량이 많아지면 ... 장난아니게 오래걸림 ...

Page 11: C++과 Lua script연동

코딩 빌드기획 테스트

코딩량이 많아지면 ... 장난아니게 오래걸림 ... 또 수치를 변경해야하면 ...

Page 12: C++과 Lua script연동

코딩 빌드기획 테스트

코딩량이 많아지면 ... 장난아니게 오래걸림 ... 또 수치를 변경해야하면 ...빡 침 !

Page 13: C++과 Lua script연동

코딩 빌드기획 테스트

코딩량이 많아지면 ... 장난아니게 오래걸림 ... 또 수치를 변경해야하면 ...빡 침 !

이럴때 필요한 것은 ?

Page 14: C++과 Lua script연동

• 외부의 데이터를 기반으로 프로그램을 제작하는 아키텍처

데이터 주도 프로그래밍

Page 15: C++과 Lua script연동

게임

Page 16: C++과 Lua script연동

게임

*.ini게임 환경 설정

Page 17: C++과 Lua script연동

게임

*.ini게임 환경 설정

*.xml수치 데이터

Page 18: C++과 Lua script연동

게임

*.ini게임 환경 설정

*.xml수치 데이터

*.lua게임 로직

Page 19: C++과 Lua script연동

게임

*.ini게임 환경 설정

*.xml수치 데이터

*.lua게임 로직

*.fx게임 이펙트

Page 20: C++과 Lua script연동

게임

*.ini게임 환경 설정

*.xml수치 데이터

*.lua게임 로직

*.fx게임 이펙트

외에도 프로그래머가 직접데이터 파일을 만들 수 있다 .ex) 0,1 로 이뤄진 맵파일 .. ㅋㅋ

Page 21: C++과 Lua script연동

코딩 빌드기획 테스트

이런 개발 과정이 ..

Page 22: C++과 Lua script연동

스크립트 코딩기획 테스트

이렇게 변했습니다 !

Page 23: C++과 Lua script연동

결론

Page 24: C++과 Lua script연동

저는 게임의 가장 핵심이되는 ‘로직’부분을스크립트로 처리 가능합니다 .

Page 25: C++과 Lua script연동

• Windows 용 설치 파일• https://code.google.com/p/luaforwindows/

루아 설치하기

Page 26: C++과 Lua script연동

• 설치된 폴더의 lua.exe 실행

루아 써보기 - 1

Page 27: C++과 Lua script연동

• 루아의 변수는 기본적으로 전부 전역 변수이다 .• 스크립트 전체에서 접근 가능하며 끝날 때까지 유지된다 .• 지역변수는 ‘ local’ 키워드를 사용하여 사용 가능하다 .• 가능한 곳에서는 지역변수를 사용하는 것이 좋다 .

• ex)• a = 2 // 전역변수• local a = 2 // 지역변수

루아 - 변수

Page 28: C++과 Lua script연동

• nil• 다른 언어의 NULL 과 유사하다 .• 변수에 nil 을 대입하면 삭제된다 .

• boolean• 다른 언어처럼 true, false 값만 가짐

루아 - 변수

Page 29: C++과 Lua script연동

• string• 다른 스크립트 언어처럼 문자열 처리에 강하다 .• 역슬래시를 이용하여 특수문자 사용 가능 ( 줄바꿈 , 탭 , 따옴표 등 )• 수치와 문자열을 자동으로 상호 변환

• ex) “8”+8 -> 16, “8+8” -> “8+8”, “hello”+8 -> ERROR

• number• 루아는 정수와 소수를 구분 하지 않고 모든 숫자를 실수형으로 처리한다 .

루아 - 변수

Page 30: C++과 Lua script연동

• table• C++ 의 std::map, Python 의 dict 와 유사하다 .• number 형과 string 형을 모두 인덱스 할 수 있다 . (nil 은 제외 )• 크기가 고정되어 있지 않다 . (Array 가 아님 )• 값 , 변수가 아닌 객체이다 .• 다른 언어와 달리 0 이 아닌 1 부터 시작한다 .

루아 - 변수

Page 31: C++과 Lua script연동

• 산술 연산자• +, -, *, /

• 관계 연산자• <, >, <=, >=, ==, ~=

• 논리 연산자• and, or, not

루아 - 연산자

Page 32: C++과 Lua script연동

• if ( 조건식 ) than ( 실행문 )else if ( 조건식 ) than ( 실행문 )else ( 실행문 )end

루아 – 명령문 (if)

Page 33: C++과 Lua script연동

• while ( 조건식 ) do ( 실행문 ) end

루아 – 명령문 (while)

Page 34: C++과 Lua script연동

• C++ 의 do ~ while 과 유사• repeat

( 실행문 ) until ( 조건식 )

루아 – 명령문 (repeat)

Page 35: C++과 Lua script연동

• for ( 초기화 ), ( 조건식 ), ( 증감 ) do ( 실행문 ) end• 증감을 생략하면 자동으로 1 씩 증가

루아 – 명령문 (numeric for)

Page 36: C++과 Lua script연동

• 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)

Page 37: C++과 Lua script연동

• function 함수이름 ( 인자 ) 함수내용 .. return 반환값end

루아 – 함수

Page 38: C++과 Lua script연동

• arg 라는 table 을 만들어서 가변 인수를 담음• 가변 인수는 마침표 세개 (...) 로 구분• arg.n 에 가변 인수의 개수를 저장

• function 함수이름 (a, b, ...) print(a[1])end

루아 – 함수

Page 39: C++과 Lua script연동

• 루아의 함수는 결과를 여러 개 반환 가능• function 함수이름 ()

return 1, 2, “asdf”end

루아 – 함수

Page 40: C++과 Lua script연동

더 자세한 정보는

assert, dofile, math, tonumber, tostring, string., table.등 다양한 기본 라이브러리 함수

Page 41: C++과 Lua script연동

assert, dofile, math, tonumber, tostring, string., table.등 다양한 기본 라이브러리 함수

더 자세한 정보는

Page 42: C++과 Lua script연동
Page 43: C++과 Lua script연동

• 환경은 Windows / Visual Studio 2013

• Visual Studio 프로젝트 Directory 설정• Include

• C:\Program Files\Lua\5.1\include

• Link• C:\Program Files\Lua\5.1\lib

• C:\Program Files (x86)\Lua\5.1\lib 디렉토리에서dll 파일 프로젝트에 복사

C++ 과 루아 스크립트 연동

Page 44: C++과 Lua script연동

• lib 파일과 header 파일을 include 한다 .• 루아는 C 로 만들어졌기 때문에 extern “C” 를 지정해준다 .

C++ 과 루아 스크립트 연동

Page 45: C++과 Lua script연동

• 다음 코드는 lua.exe 를 실행시킨 것 처럼 루아를 사용할 수 있게 해준다 .

C++ 과 루아 스크립트 연동

Page 46: C++과 Lua script연동

• 출처 : http://sweeper.egloos.com/viewer/2821116

C++ 과 루아 스크립트 연동

Page 47: C++과 Lua script연동

• 스크립트 파일을 작성하고 C++ 에서 열고 실행시킬 수 있다 .

C++ 과 루아 스크립트 연동

Page 48: C++과 Lua script연동

• C++ 에서 Lua 의 함수를 호출 시킬 수 있다 .

C++ 과 루아 스크립트 연동

Page 49: C++과 Lua script연동

• 역으로 Lua 에서 C++ 함수를 호출 할 수 있다 .

C++ 과 루아 스크립트 연동

Page 50: C++과 Lua script연동

• Lua 를 좀 더 쉽게 연결할 수 있도록 도와주는 C++ 라이브러리• MIT 라이센스• boost 라이브러리가 필요하다 .

• 설치• http://sourceforge.net/projects/luabind/• 압출을 푼뒤 빌드한다 .

• 정적 라이브러리로 빌드 (Visual Studio 2013 기준 )• 이 과정에서 boost, lua 라이브러리 필요• 디버그 , 릴리즈 둘 다 빌드

• 나온 결과물을 프로젝트에 포함한다 . (lib)

luabind

Page 51: C++과 Lua script연동

• 이제 사용하면된다 .• 자세한 사용 방법은 doc 디렉토리를 찾아보면 나와있다 .• 각종 example 도 압축 파일 내부에 존재한다

luabind

Page 52: C++과 Lua script연동

주의할 점

• 배보다 배꼽이 더 커질 수 있다 .• 컴파일 시간이 오래 걸리지 않는데도 무리해서 스크립트로 작성하다가

작업시간이 더 오래 걸릴 수 있음• 스크립트에 대해서 잘 모른다면 C++ 에서 작성하는게 좋을 수 있다 .• 여러 C++ 의 함수를 Lua 로 바인드하기 위해서는 시간이 들고 소스 코드가

복잡해질 가능성이 있다 .

• 디버깅이 어렵다 .• 전문 개발 툴이 없다 .• 로딩과 실행 속도가 느리다 .

Page 53: C++과 Lua script연동

주의할 점

• 배보다 배꼽이 더 커질 수 있다 .• 컴파일 시간이 오래 걸리지 않는데도 무리해서 스크립트로 작성하다가

작업시간이 더 오래 걸릴 수 있음• 스크립트에 대해서 잘 모른다면 C++ 에서 작성하는게 좋을 수 있다 .• 여러 C++ 의 함수를 Lua 로 바인드하기 위해서는 시간이 들고 소스 코드가

복잡해질 가능성이 있다 .

• 디버깅이 어렵다 .• 전문 개발 툴이 없다 .• 로딩과 실행 속도가 느리다 .

제대로 사용하려면 팀원 각각의 역활 수행을 제대로 해야한다 .

ex)코어 프로그래머 -> 몬스터 FSM 을 루아로 바인드함

컨텐츠 프로그래머 , 기획자 -> 바인드된 함수를 이용하여 몬스터 AI 제작

http://www.gamedevforever.com/12( 박민근 교수님이 쓰신 루아 사용에 대한 비판 글 )

Page 55: C++과 Lua script연동

감사합니다