SlideShare una empresa de Scribd logo
1 de 55
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 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
참고 자료
감사합니다

Más contenido relacionado

La actualidad más candente

190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁KWANGIL KIM
 
Windows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonWindows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonSeungmo Koo
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기Sang Heon Lee
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기Seungjae Lee
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템QooJuice
 
Multithread & shared_ptr
Multithread & shared_ptrMultithread & shared_ptr
Multithread & shared_ptr내훈 정
 
[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규ChangKyu Song
 
리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션QooJuice
 
[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들MinGeun Park
 
C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현Bongseok Cho
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018devCAT Studio, NEXON
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기YEONG-CHEON YOU
 
[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들
[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들
[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들DongMin Choi
 
[CSStudy] 코딩인터뷰 완전 분석 #7.pdf
[CSStudy] 코딩인터뷰 완전 분석 #7.pdf[CSStudy] 코딩인터뷰 완전 분석 #7.pdf
[CSStudy] 코딩인터뷰 완전 분석 #7.pdfMinGeun Park
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPUYEONG-CHEON YOU
 
게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법Chris Ohk
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심흥배 최
 
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012Esun Kim
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceXionglong Jin
 
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)MinGeun Park
 

La actualidad más candente (20)

190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁
 
Windows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonWindows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance Comparison
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
 
Multithread & shared_ptr
Multithread & shared_ptrMultithread & shared_ptr
Multithread & shared_ptr
 
[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규
 
리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션
 
[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들
 
C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들
[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들
[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들
 
[CSStudy] 코딩인터뷰 완전 분석 #7.pdf
[CSStudy] 코딩인터뷰 완전 분석 #7.pdf[CSStudy] 코딩인터뷰 완전 분석 #7.pdf
[CSStudy] 코딩인터뷰 완전 분석 #7.pdf
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU
 
게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
 
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
 
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
 

Similar a C++과 Lua script연동

이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013devCAT Studio, NEXON
 
C 언어 스터디 01 - 기초
C 언어 스터디 01 - 기초C 언어 스터디 01 - 기초
C 언어 스터디 01 - 기초Yu Yongwoo
 
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017devCAT Studio, NEXON
 
Slack과 Rust로 Amazon ECS에서 서비스 배포하기
Slack과 Rust로 Amazon ECS에서 서비스 배포하기Slack과 Rust로 Amazon ECS에서 서비스 배포하기
Slack과 Rust로 Amazon ECS에서 서비스 배포하기Eunchong Yu
 
C++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaC++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaLazy Ahasil
 
Go로 새 프로젝트 시작하기
Go로 새 프로젝트 시작하기Go로 새 프로젝트 시작하기
Go로 새 프로젝트 시작하기Joonsung Lee
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기Sumin Byeon
 
A tour of C++ : the basics
A tour of C++ : the basicsA tour of C++ : the basics
A tour of C++ : the basicsJaewon Choi
 
C++ Advanced 강의 5주차
C++ Advanced 강의 5주차C++ Advanced 강의 5주차
C++ Advanced 강의 5주차HyunJoon Park
 
github actions kubernetes 설치&운영하기
github actions kubernetes 설치&운영하기github actions kubernetes 설치&운영하기
github actions kubernetes 설치&운영하기newdeal2
 
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기NAVER D2
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10흥배 최
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)Tae Young Lee
 
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅Youngmin Koo
 
[2021 오픈소스 컨트리뷰션 아카데미] Libreoffice 한국어 번역 및 사용성 기능 향상 프로젝트 킥오프 미팅 (2021.08.07.)
[2021 오픈소스 컨트리뷰션 아카데미]  Libreoffice 한국어 번역 및 사용성 기능 향상 프로젝트 킥오프 미팅 (2021.08.07.)[2021 오픈소스 컨트리뷰션 아카데미]  Libreoffice 한국어 번역 및 사용성 기능 향상 프로젝트 킥오프 미팅 (2021.08.07.)
[2021 오픈소스 컨트리뷰션 아카데미] Libreoffice 한국어 번역 및 사용성 기능 향상 프로젝트 킥오프 미팅 (2021.08.07.)DaeHyun Sung
 
[DS Meetup] iPad로 가벼운 분석환경 구축해보기
[DS Meetup] iPad로 가벼운 분석환경 구축해보기[DS Meetup] iPad로 가벼운 분석환경 구축해보기
[DS Meetup] iPad로 가벼운 분석환경 구축해보기Minho Lee
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍Chris Ohk
 
아이폰에 포팅해보기
아이폰에 포팅해보기아이폰에 포팅해보기
아이폰에 포팅해보기changehee lee
 

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

Lua script
Lua scriptLua script
Lua script
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
 
C 언어 스터디 01 - 기초
C 언어 스터디 01 - 기초C 언어 스터디 01 - 기초
C 언어 스터디 01 - 기초
 
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
 
Slack과 Rust로 Amazon ECS에서 서비스 배포하기
Slack과 Rust로 Amazon ECS에서 서비스 배포하기Slack과 Rust로 Amazon ECS에서 서비스 배포하기
Slack과 Rust로 Amazon ECS에서 서비스 배포하기
 
C++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaC++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & Nana
 
Go로 새 프로젝트 시작하기
Go로 새 프로젝트 시작하기Go로 새 프로젝트 시작하기
Go로 새 프로젝트 시작하기
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
 
A tour of C++ : the basics
A tour of C++ : the basicsA tour of C++ : the basics
A tour of C++ : the basics
 
C++ Advanced 강의 5주차
C++ Advanced 강의 5주차C++ Advanced 강의 5주차
C++ Advanced 강의 5주차
 
github actions kubernetes 설치&운영하기
github actions kubernetes 설치&운영하기github actions kubernetes 설치&운영하기
github actions kubernetes 설치&운영하기
 
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
 
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
 
[2021 오픈소스 컨트리뷰션 아카데미] Libreoffice 한국어 번역 및 사용성 기능 향상 프로젝트 킥오프 미팅 (2021.08.07.)
[2021 오픈소스 컨트리뷰션 아카데미]  Libreoffice 한국어 번역 및 사용성 기능 향상 프로젝트 킥오프 미팅 (2021.08.07.)[2021 오픈소스 컨트리뷰션 아카데미]  Libreoffice 한국어 번역 및 사용성 기능 향상 프로젝트 킥오프 미팅 (2021.08.07.)
[2021 오픈소스 컨트리뷰션 아카데미] Libreoffice 한국어 번역 및 사용성 기능 향상 프로젝트 킥오프 미팅 (2021.08.07.)
 
파이선 실전공략-1
파이선 실전공략-1파이선 실전공략-1
파이선 실전공략-1
 
[DS Meetup] iPad로 가벼운 분석환경 구축해보기
[DS Meetup] iPad로 가벼운 분석환경 구축해보기[DS Meetup] iPad로 가벼운 분석환경 구축해보기
[DS Meetup] iPad로 가벼운 분석환경 구축해보기
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
 
아이폰에 포팅해보기
아이폰에 포팅해보기아이폰에 포팅해보기
아이폰에 포팅해보기
 

Más de 선협 이

웹 개발을 위해 꼭 알아야하는 보안 공격
웹 개발을 위해 꼭 알아야하는 보안 공격웹 개발을 위해 꼭 알아야하는 보안 공격
웹 개발을 위해 꼭 알아야하는 보안 공격선협 이
 
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 테스트선협 이
 

Más de 선협 이 (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
 

C++과 Lua script연동

  • 3. 아이엠 그라운드 자기소개하기 • Python, Ruby같은 스크립트 언어 • 다른 스크립트 언어보다 가볍다. • 프로그램에 내장되는 스크립트이다. • 프로그램과 통신이 가능하다. • 데이터 교환 • API 상호 호출 • C, C++언어에 이식하기 편하다. • 가비지 컬렉터가 있다. • 쉽다.
  • 5.
  • 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. 등 다양한 기본 라이브러리 함수 더 자세한 정보는
  • 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++과 루아 스크립트 연동
  • 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 참고 자료