C++과 Lua script연동

8,580 views
8,240 views

Published on

C++과 Lua script 연동

Published in: Technology
0 Comments
25 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
8,580
On SlideShare
0
From Embeds
0
Number of Embeds
706
Actions
Shares
0
Downloads
78
Comments
0
Likes
25
Embeds 0
No embeds

No notes for slide

C++과 Lua script연동

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

×