C++과 Lua script연동
-
Upload
sunhyoup-lee -
Category
Technology
-
view
4.343 -
download
0
description
Transcript of C++과 Lua script연동
C++ 과 Lua Script연동하기NHN NEXT 이선협
넌 누구냐 ?!
아이엠 그라운드 자기소개하기
• Python, Ruby 같은 스크립트 언어• 다른 스크립트 언어보다 가볍다 .• 프로그램에 내장되는 스크립트이다 .• 프로그램과 통신이 가능하다 .• 데이터 교환• API 상호 호출
• C, C++ 언어에 이식하기 편하다 .• 가비지 컬렉터가 있다 .• 쉽다 .
너 뭐하는 애니 ?
• 와우에서 루아 스크립트를 사용한다는 얘기는 이미 유명하다 .• 사용자 인터페이스 (UI)• 캐릭터 애니메이션• 월드맵 조정
• 네버윈터 나이츠 , ToME, 원숭이 섬으로부터 탈출 , 앵그리버드 등 ... 게임 제작에 많이 쓰임 ..!
게임 개발에 자주 쓰입니다 !
널 왜 사용할까 ?
코딩 빌드기획 테스트
코딩 빌드기획 테스트
코딩량이 많아지면 ...
코딩 빌드기획 테스트
코딩량이 많아지면 ... 장난아니게 오래걸림 ...
코딩 빌드기획 테스트
코딩량이 많아지면 ... 장난아니게 오래걸림 ... 또 수치를 변경해야하면 ...
코딩 빌드기획 테스트
코딩량이 많아지면 ... 장난아니게 오래걸림 ... 또 수치를 변경해야하면 ...빡 침 !
코딩 빌드기획 테스트
코딩량이 많아지면 ... 장난아니게 오래걸림 ... 또 수치를 변경해야하면 ...빡 침 !
이럴때 필요한 것은 ?
• 외부의 데이터를 기반으로 프로그램을 제작하는 아키텍처
데이터 주도 프로그래밍
게임
게임
*.ini게임 환경 설정
게임
*.ini게임 환경 설정
*.xml수치 데이터
게임
*.ini게임 환경 설정
*.xml수치 데이터
*.lua게임 로직
게임
*.ini게임 환경 설정
*.xml수치 데이터
*.lua게임 로직
*.fx게임 이펙트
게임
*.ini게임 환경 설정
*.xml수치 데이터
*.lua게임 로직
*.fx게임 이펙트
외에도 프로그래머가 직접데이터 파일을 만들 수 있다 .ex) 0,1 로 이뤄진 맵파일 .. ㅋㅋ
코딩 빌드기획 테스트
이런 개발 과정이 ..
스크립트 코딩기획 테스트
이렇게 변했습니다 !
결론
저는 게임의 가장 핵심이되는 ‘로직’부분을스크립트로 처리 가능합니다 .
• Windows 용 설치 파일• https://code.google.com/p/luaforwindows/
루아 설치하기
• 설치된 폴더의 lua.exe 실행
루아 써보기 - 1
• 루아의 변수는 기본적으로 전부 전역 변수이다 .• 스크립트 전체에서 접근 가능하며 끝날 때까지 유지된다 .• 지역변수는 ‘ local’ 키워드를 사용하여 사용 가능하다 .• 가능한 곳에서는 지역변수를 사용하는 것이 좋다 .
• ex)• a = 2 // 전역변수• local a = 2 // 지역변수
루아 - 변수
• nil• 다른 언어의 NULL 과 유사하다 .• 변수에 nil 을 대입하면 삭제된다 .
• boolean• 다른 언어처럼 true, false 값만 가짐
루아 - 변수
• string• 다른 스크립트 언어처럼 문자열 처리에 강하다 .• 역슬래시를 이용하여 특수문자 사용 가능 ( 줄바꿈 , 탭 , 따옴표 등 )• 수치와 문자열을 자동으로 상호 변환
• ex) “8”+8 -> 16, “8+8” -> “8+8”, “hello”+8 -> ERROR
• number• 루아는 정수와 소수를 구분 하지 않고 모든 숫자를 실수형으로 처리한다 .
루아 - 변수
• table• C++ 의 std::map, Python 의 dict 와 유사하다 .• number 형과 string 형을 모두 인덱스 할 수 있다 . (nil 은 제외 )• 크기가 고정되어 있지 않다 . (Array 가 아님 )• 값 , 변수가 아닌 객체이다 .• 다른 언어와 달리 0 이 아닌 1 부터 시작한다 .
루아 - 변수
• 산술 연산자• +, -, *, /
• 관계 연산자• <, >, <=, >=, ==, ~=
• 논리 연산자• and, or, not
루아 - 연산자
• if ( 조건식 ) than ( 실행문 )else if ( 조건식 ) than ( 실행문 )else ( 실행문 )end
루아 – 명령문 (if)
• while ( 조건식 ) do ( 실행문 ) end
루아 – 명령문 (while)
• C++ 의 do ~ while 과 유사• repeat
( 실행문 ) until ( 조건식 )
루아 – 명령문 (repeat)
• for ( 초기화 ), ( 조건식 ), ( 증감 ) do ( 실행문 ) end• 증감을 생략하면 자동으로 1 씩 증가
루아 – 명령문 (numeric for)
• 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)
• function 함수이름 ( 인자 ) 함수내용 .. return 반환값end
루아 – 함수
• arg 라는 table 을 만들어서 가변 인수를 담음• 가변 인수는 마침표 세개 (...) 로 구분• arg.n 에 가변 인수의 개수를 저장
• function 함수이름 (a, b, ...) print(a[1])end
루아 – 함수
• 루아의 함수는 결과를 여러 개 반환 가능• function 함수이름 ()
return 1, 2, “asdf”end
루아 – 함수
더 자세한 정보는
assert, dofile, math, tonumber, tostring, string., table.등 다양한 기본 라이브러리 함수
assert, dofile, math, tonumber, tostring, string., table.등 다양한 기본 라이브러리 함수
더 자세한 정보는
• 환경은 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++ 과 루아 스크립트 연동
• lib 파일과 header 파일을 include 한다 .• 루아는 C 로 만들어졌기 때문에 extern “C” 를 지정해준다 .
C++ 과 루아 스크립트 연동
• 다음 코드는 lua.exe 를 실행시킨 것 처럼 루아를 사용할 수 있게 해준다 .
C++ 과 루아 스크립트 연동
• 출처 : http://sweeper.egloos.com/viewer/2821116
C++ 과 루아 스크립트 연동
• 스크립트 파일을 작성하고 C++ 에서 열고 실행시킬 수 있다 .
C++ 과 루아 스크립트 연동
• C++ 에서 Lua 의 함수를 호출 시킬 수 있다 .
C++ 과 루아 스크립트 연동
• 역으로 Lua 에서 C++ 함수를 호출 할 수 있다 .
C++ 과 루아 스크립트 연동
• Lua 를 좀 더 쉽게 연결할 수 있도록 도와주는 C++ 라이브러리• MIT 라이센스• boost 라이브러리가 필요하다 .
• 설치• http://sourceforge.net/projects/luabind/• 압출을 푼뒤 빌드한다 .
• 정적 라이브러리로 빌드 (Visual Studio 2013 기준 )• 이 과정에서 boost, lua 라이브러리 필요• 디버그 , 릴리즈 둘 다 빌드
• 나온 결과물을 프로젝트에 포함한다 . (lib)
luabind
• 이제 사용하면된다 .• 자세한 사용 방법은 doc 디렉토리를 찾아보면 나와있다 .• 각종 example 도 압축 파일 내부에 존재한다
luabind
주의할 점
• 배보다 배꼽이 더 커질 수 있다 .• 컴파일 시간이 오래 걸리지 않는데도 무리해서 스크립트로 작성하다가
작업시간이 더 오래 걸릴 수 있음• 스크립트에 대해서 잘 모른다면 C++ 에서 작성하는게 좋을 수 있다 .• 여러 C++ 의 함수를 Lua 로 바인드하기 위해서는 시간이 들고 소스 코드가
복잡해질 가능성이 있다 .
• 디버깅이 어렵다 .• 전문 개발 툴이 없다 .• 로딩과 실행 속도가 느리다 .
주의할 점
• 배보다 배꼽이 더 커질 수 있다 .• 컴파일 시간이 오래 걸리지 않는데도 무리해서 스크립트로 작성하다가
작업시간이 더 오래 걸릴 수 있음• 스크립트에 대해서 잘 모른다면 C++ 에서 작성하는게 좋을 수 있다 .• 여러 C++ 의 함수를 Lua 로 바인드하기 위해서는 시간이 들고 소스 코드가
복잡해질 가능성이 있다 .
• 디버깅이 어렵다 .• 전문 개발 툴이 없다 .• 로딩과 실행 속도가 느리다 .
제대로 사용하려면 팀원 각각의 역활 수행을 제대로 해야한다 .
ex)코어 프로그래머 -> 몬스터 FSM 을 루아로 바인드함
컨텐츠 프로그래머 , 기획자 -> 바인드된 함수를 이용하여 몬스터 AI 제작
http://www.gamedevforever.com/12( 박민근 교수님이 쓰신 루아 사용에 대한 비판 글 )
• http://www.gamedevforever.com/12 (알콜코더 민군교수님의 자료 )
• http://sweeper.egloos.com/viewer/2821116• http://sweeper.egloos.com/viewer/2821919• http://
www.gpgstudy.com/forum/viewtopic.php?t=5738&sid=38357b68a309f7e7bf296445828c1874• http://bombfox.tistory.com/45• http://andromedarabbit.net/wp/cplusplus_cli_lecture_2009_0
6/• http://hoidu.tistory.com/• http://blog.naver.com/PostList.nhn?blogId=sunxodid79
참고 자료
감사합니다