SlideShare a Scribd company logo
C++과 Lua Script
연동하기
NHN NEXT 이선협
넌 누구냐?!
아이엠 그라운드 자기소개하기
• Python, Ruby같은 스크립트 언어
• 다른 스크립트 언어보다 가볍다.
• 프로그램에 내장되는 스크립트이다.
• 프로그램과 통신이 가능하다.
• 데이터 교환
• API 상호 호출
• C, C++언어에 이식하기 편하다.
• 가비지 컬렉터가 있다.
• 쉽다.
너 뭐하는 애니?
C++과 Lua script연동
• 와우에서 루아 스크립트를 사용한다는 얘기는 이미 유명하다.
• 사용자 인터페이스 (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.
등 다양한 기본 라이브러리 함수
더 자세한 정보는
C++과 Lua script연동
• 환경은 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++과 루아 스크립트 연동
• 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_06/
• http://hoidu.tistory.com/
• http://blog.naver.com/PostList.nhn?blogId=sunxodid79
참고 자료
감사합니다

More Related Content

What's hot (20)

Overlapped IO와 IOCP 조사 발표
Overlapped IO와 IOCP 조사 발표Overlapped IO와 IOCP 조사 발표
Overlapped IO와 IOCP 조사 발표
Kwen Won Lee
 
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
devCAT Studio, NEXON
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
devCAT Studio, NEXON
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
Jaeseung Ha
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
YEONG-CHEON YOU
 
언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링
TonyCms
 
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
DongMin Choi
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
devCAT Studio, NEXON
 
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
そろそろ知っておきたい!!コンテナ技術とDockerのキホンそろそろ知っておきたい!!コンテナ技術とDockerのキホン
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
Naoki Nagazumi
 
게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴
예림 임
 
190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁
KWANGIL KIM
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
흥배 최
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
YEONG-CHEON YOU
 
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
ChangKyu Song
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
devCAT Studio, NEXON
 
[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들
MinGeun Park
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직
Hoyoung Choi
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
devCAT Studio, NEXON
 
게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴
MinGeun Park
 
REST API 설계
REST API 설계REST API 설계
REST API 설계
Terry Cho
 
Overlapped IO와 IOCP 조사 발표
Overlapped IO와 IOCP 조사 발표Overlapped IO와 IOCP 조사 발표
Overlapped IO와 IOCP 조사 발표
Kwen Won Lee
 
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
devCAT Studio, NEXON
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
devCAT Studio, NEXON
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
Jaeseung Ha
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
YEONG-CHEON YOU
 
언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링
TonyCms
 
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
DongMin Choi
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
devCAT Studio, NEXON
 
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
そろそろ知っておきたい!!コンテナ技術とDockerのキホンそろそろ知っておきたい!!コンテナ技術とDockerのキホン
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
Naoki Nagazumi
 
게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴
예림 임
 
190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁
KWANGIL KIM
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
흥배 최
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
YEONG-CHEON YOU
 
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
ChangKyu Song
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
devCAT Studio, NEXON
 
[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들
MinGeun Park
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직
Hoyoung Choi
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
devCAT Studio, NEXON
 
게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴
MinGeun Park
 
REST API 설계
REST API 설계REST API 설계
REST API 설계
Terry Cho
 

Similar to C++과 Lua script연동 (20)

Lua script
Lua scriptLua script
Lua script
cancan21st
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
Seungjae Lee
 
하늘에 별따기
하늘에 별따기하늘에 별따기
하늘에 별따기
Jun-Seok Mun
 
Python 01
Python 01Python 01
Python 01
Dasom Im
 
Kgc2006 Template Metaprogramming을 이용한 LuaTinker 구현
Kgc2006 Template Metaprogramming을 이용한 LuaTinker 구현Kgc2006 Template Metaprogramming을 이용한 LuaTinker 구현
Kgc2006 Template Metaprogramming을 이용한 LuaTinker 구현
Sang Goo Kwon
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
devCAT Studio, NEXON
 
파이썬 튜토리얼 (Python tutorial)
파이썬 튜토리얼 (Python tutorial)파이썬 튜토리얼 (Python tutorial)
파이썬 튜토리얼 (Python tutorial)
민지 김
 
Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)
정명훈 Jerry Jeong
 
Hello python 오리엔테이션(파이썬 스터디, 발표자료)
Hello python 오리엔테이션(파이썬 스터디, 발표자료)Hello python 오리엔테이션(파이썬 스터디, 발표자료)
Hello python 오리엔테이션(파이썬 스터디, 발표자료)
Cherucy
 
Lua 문법
Lua 문법Lua 문법
Lua 문법
Jaehoon Lee
 
Python
PythonPython
Python
J J
 
파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수
Yeon Soo Kim
 
파이선 실전공략-1
파이선 실전공략-1파이선 실전공략-1
파이선 실전공략-1
Nomota Hiongun KIM
 
Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버
Jaejin Yun
 
파이썬 스터디 9장
파이썬 스터디 9장파이썬 스터디 9장
파이썬 스터디 9장
SeongHyun Ahn
 
알파희 - PyPy/RPython으로 20배 빨라지는 아희 JIT 인터프리터
알파희 - PyPy/RPython으로 20배 빨라지는 아희 JIT 인터프리터알파희 - PyPy/RPython으로 20배 빨라지는 아희 JIT 인터프리터
알파희 - PyPy/RPython으로 20배 빨라지는 아희 JIT 인터프리터
YunWon Jeong
 
파이썬 소개
파이썬 소개 파이썬 소개
파이썬 소개
SeongHyun Ahn
 
3주차 language
3주차 language3주차 language
3주차 language
준혁 이
 
1 Python기초 오리엔테이션
1 Python기초 오리엔테이션1 Python기초 오리엔테이션
1 Python기초 오리엔테이션
cpt mobilex
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
Seungjae Lee
 
하늘에 별따기
하늘에 별따기하늘에 별따기
하늘에 별따기
Jun-Seok Mun
 
Kgc2006 Template Metaprogramming을 이용한 LuaTinker 구현
Kgc2006 Template Metaprogramming을 이용한 LuaTinker 구현Kgc2006 Template Metaprogramming을 이용한 LuaTinker 구현
Kgc2006 Template Metaprogramming을 이용한 LuaTinker 구현
Sang Goo Kwon
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
devCAT Studio, NEXON
 
파이썬 튜토리얼 (Python tutorial)
파이썬 튜토리얼 (Python tutorial)파이썬 튜토리얼 (Python tutorial)
파이썬 튜토리얼 (Python tutorial)
민지 김
 
Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)
정명훈 Jerry Jeong
 
Hello python 오리엔테이션(파이썬 스터디, 발표자료)
Hello python 오리엔테이션(파이썬 스터디, 발표자료)Hello python 오리엔테이션(파이썬 스터디, 발표자료)
Hello python 오리엔테이션(파이썬 스터디, 발표자료)
Cherucy
 
Python
PythonPython
Python
J J
 
파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수
Yeon Soo Kim
 
Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버
Jaejin Yun
 
파이썬 스터디 9장
파이썬 스터디 9장파이썬 스터디 9장
파이썬 스터디 9장
SeongHyun Ahn
 
알파희 - PyPy/RPython으로 20배 빨라지는 아희 JIT 인터프리터
알파희 - PyPy/RPython으로 20배 빨라지는 아희 JIT 인터프리터알파희 - PyPy/RPython으로 20배 빨라지는 아희 JIT 인터프리터
알파희 - PyPy/RPython으로 20배 빨라지는 아희 JIT 인터프리터
YunWon Jeong
 
3주차 language
3주차 language3주차 language
3주차 language
준혁 이
 
1 Python기초 오리엔테이션
1 Python기초 오리엔테이션1 Python기초 오리엔테이션
1 Python기초 오리엔테이션
cpt mobilex
 
Ad

More from 선협 이 (16)

웹 개발을 위해 꼭 알아야하는 보안 공격
웹 개발을 위해 꼭 알아야하는 보안 공격웹 개발을 위해 꼭 알아야하는 보안 공격
웹 개발을 위해 꼭 알아야하는 보안 공격
선협 이
 
MongoDB 이해하기
MongoDB 이해하기MongoDB 이해하기
MongoDB 이해하기
선협 이
 
Deep dive into Vue.js
Deep dive into Vue.jsDeep dive into Vue.js
Deep dive into Vue.js
선협 이
 
오픈소스를 여행하는 히치하이커를 위한 안내서 - 자막
오픈소스를 여행하는 히치하이커를 위한 안내서 - 자막오픈소스를 여행하는 히치하이커를 위한 안내서 - 자막
오픈소스를 여행하는 히치하이커를 위한 안내서 - 자막
선협 이
 
Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017
Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017
Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017
선협 이
 
Vue.js와 Reactive Programming 자막 :: Vuetiful Korea 2nd
Vue.js와 Reactive Programming 자막 :: Vuetiful Korea 2ndVue.js와 Reactive Programming 자막 :: Vuetiful Korea 2nd
Vue.js와 Reactive Programming 자막 :: Vuetiful Korea 2nd
선협 이
 
Reactive Programming With Swift
Reactive Programming With SwiftReactive Programming With Swift
Reactive Programming With Swift
선협 이
 
Tour of Vue.js
Tour of Vue.jsTour of Vue.js
Tour of Vue.js
선협 이
 
Functional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwiftFunctional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwift
선협 이
 
파크히어 Realm 사용 사례
파크히어 Realm 사용 사례파크히어 Realm 사용 사례
파크히어 Realm 사용 사례
선협 이
 
왜 Swift를 해야할까요?
왜 Swift를 해야할까요?왜 Swift를 해야할까요?
왜 Swift를 해야할까요?
선협 이
 
C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법
선협 이
 
C++11
C++11C++11
C++11
선협 이
 
MSBuild + Git + Jenkins
MSBuild + Git + JenkinsMSBuild + Git + Jenkins
MSBuild + Git + Jenkins
선협 이
 
Post Effect 테스트
Post Effect 테스트Post Effect 테스트
Post Effect 테스트
선협 이
 
C++과 TDD
C++과 TDDC++과 TDD
C++과 TDD
선협 이
 
웹 개발을 위해 꼭 알아야하는 보안 공격
웹 개발을 위해 꼭 알아야하는 보안 공격웹 개발을 위해 꼭 알아야하는 보안 공격
웹 개발을 위해 꼭 알아야하는 보안 공격
선협 이
 
MongoDB 이해하기
MongoDB 이해하기MongoDB 이해하기
MongoDB 이해하기
선협 이
 
Deep dive into Vue.js
Deep dive into Vue.jsDeep dive into Vue.js
Deep dive into Vue.js
선협 이
 
오픈소스를 여행하는 히치하이커를 위한 안내서 - 자막
오픈소스를 여행하는 히치하이커를 위한 안내서 - 자막오픈소스를 여행하는 히치하이커를 위한 안내서 - 자막
오픈소스를 여행하는 히치하이커를 위한 안내서 - 자막
선협 이
 
Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017
Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017
Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017
선협 이
 
Vue.js와 Reactive Programming 자막 :: Vuetiful Korea 2nd
Vue.js와 Reactive Programming 자막 :: Vuetiful Korea 2ndVue.js와 Reactive Programming 자막 :: Vuetiful Korea 2nd
Vue.js와 Reactive Programming 자막 :: Vuetiful Korea 2nd
선협 이
 
Reactive Programming With Swift
Reactive Programming With SwiftReactive Programming With Swift
Reactive Programming With Swift
선협 이
 
Tour of Vue.js
Tour of Vue.jsTour of Vue.js
Tour of Vue.js
선협 이
 
Functional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwiftFunctional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwift
선협 이
 
파크히어 Realm 사용 사례
파크히어 Realm 사용 사례파크히어 Realm 사용 사례
파크히어 Realm 사용 사례
선협 이
 
왜 Swift를 해야할까요?
왜 Swift를 해야할까요?왜 Swift를 해야할까요?
왜 Swift를 해야할까요?
선협 이
 
C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법
선협 이
 
MSBuild + Git + Jenkins
MSBuild + Git + JenkinsMSBuild + Git + Jenkins
MSBuild + Git + Jenkins
선협 이
 
Post Effect 테스트
Post Effect 테스트Post Effect 테스트
Post Effect 테스트
선협 이
 
Ad

C++과 Lua script연동

  • 3. 아이엠 그라운드 자기소개하기 • Python, Ruby같은 스크립트 언어 • 다른 스크립트 언어보다 가볍다. • 프로그램에 내장되는 스크립트이다. • 프로그램과 통신이 가능하다. • 데이터 교환 • API 상호 호출 • C, C++언어에 이식하기 편하다. • 가비지 컬렉터가 있다. • 쉽다.
  • 6. • 와우에서 루아 스크립트를 사용한다는 얘기는 이미 유명하다. • 사용자 인터페이스 (UI) • 캐릭터 애니메이션 • 월드맵 조정 • 네버윈터 나이츠, ToME, 원숭이 섬으로부터 탈출, 앵그리버드 등 ... 게임 제작에 많이 쓰임..! 게임 개발에 자주 쓰입니다!
  • 10. 코딩 빌드기획 테스트 코딩량이 많아지면... 장난아니게 오래걸림...
  • 11. 코딩 빌드기획 테스트 코딩량이 많아지면... 장난아니게 오래걸림... 또 수치를 변경해야하면...
  • 12. 코딩 빌드기획 테스트 코딩량이 많아지면... 장난아니게 오래걸림... 또 수치를 변경해야하면...빡 침!
  • 13. 코딩 빌드기획 테스트 코딩량이 많아지면... 장난아니게 오래걸림... 또 수치를 변경해야하면...빡 침! 이럴때 필요한 것은?
  • 14. • 외부의 데이터를 기반으로 프로그램을 제작하는 아키텍처 데이터 주도 프로그래밍
  • 18. 게임 *.ini 게임 환경 설정 *.xml 수치 데이터 *.lua 게임 로직
  • 19. 게임 *.ini 게임 환경 설정 *.xml 수치 데이터 *.lua 게임 로직 *.fx 게임 이펙트
  • 20. 게임 *.ini 게임 환경 설정 *.xml 수치 데이터 *.lua 게임 로직 *.fx 게임 이펙트 외에도 프로그래머가 직접 데이터 파일을 만들 수 있다. ex) 0,1로 이뤄진 맵파일..ㅋㅋ
  • 24. 저는 게임의 가장 핵심이되는 ‘로직’부분을 스크립트로 처리 가능합니다.
  • 25. • Windows용 설치 파일 • https://code.google.com/p/luaforwindows/ 루아 설치하기
  • 26. • 설치된 폴더의 lua.exe 실행 루아 써보기 - 1
  • 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)
  • 33. • while (조건식) do (실행문) end 루아 – 명령문 (while)
  • 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. 등 다양한 기본 라이브러리 함수 더 자세한 정보는
  • 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++과 루아 스크립트 연동
  • 44. • lib파일과 header파일을 include한다. • 루아는 C로 만들어졌기 때문에 extern “C”를 지정해준다. C++과 루아 스크립트 연동
  • 45. • 다음 코드는 lua.exe를 실행시킨 것 처럼 루아를 사용할 수 있게 해준다. C++과 루아 스크립트 연동
  • 46. • 출처 : http://sweeper.egloos.com/viewer/2821116 C++과 루아 스크립트 연동
  • 47. • 스크립트 파일을 작성하고 C++에서 열고 실행시킬 수 있다. C++과 루아 스크립트 연동
  • 48. • C++에서 Lua의 함수를 호출 시킬 수 있다. 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 (박민근 교수님이 쓰신 루아 사용에 대한 비판 글)
  • 54. • 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 참고 자료