게임인공지능 제 6 장 스크립트 2008년 5월 6일
게임에서의 스크립트 언어 활용 Epic Games의 Unreal Tournament 시리즈 BioWare의 Neverwinter Nights Crytek의 Far Cry 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
스크립트 언어란? 대규모 프로젝트 진보된 스크립트 너무 긴 컴파일 시간 요구 상수 값 변경 하나 이상의 스크립트 파일로 구성 초기화(혹은 컨피규레이션) 파일 이용 스크립팅의 초보 형태 진보된 스크립트 하나 이상의 스크립트 파일로 구성 게임 논리, 객체의 생성, 실행 파일과 상호작용 가상기계(virtual machine, VM) (혹은 인터프리터)에 의해 실행 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
스크립트 언어란? 인터프리터 방식 컴파일러 방식 The 80-20 Rule 사람이 읽기 쉬운 형태 인터프리터가 줄 단위로 읽고, 분석 및 실행 (혹은 실행 직전에 컴파일) 보안에 취약 컴파일러 방식 VM이 직접 실행할 수 있는 바이트코드 형태로 변환 플랫폼에 독립적 보안에 강함 The 80-20 Rule 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
스크립트 언어의 용도 초기화 파일에서 게임 데이터를 읽기 위한 빠르고 쉬운 방법 시간을 줄이고 생산성을 높임 창조성을 증대 자체 파서 작성 필요 없음 시간을 줄이고 생산성을 높임 긴 컴파일 시간의 단점 해소 개발 기간 중엔 스크립트 완성되면 C++로 변환 창조성을 증대 프로그래머가 아닌 다른 개발자의 능력 발휘 기회 높은 확장성 Mod 제작 기회 제공 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
스크립트 언어의 용도 대화 흐름 단계 연출 AI 논리 거대한 양의 대화를 빠르고 쉽게 작성 (특히, RPG) 게임 디자이너가 프로그래머의 도움 없이 연출 AI 논리 개발 기간 중에 변경 사항이 많은 부분을 스크립트로 노출 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua에서의 스크립팅 게임 개발자에게 가장 인기 있는 스크립트 언어 빠르고 가볍고 쉬운 언어 높은 이식성, 무료, 소스 공개 C/C++ 코드에서 Lua 변수및 함수 접근 Lua 코드에서 C/C++ 변수, 함수, 클래스 접근 컴파일러(Visual Studio)에서 Lua 사용하기 include/lib 폴더 설정 lua.lib, lualib.lib, luaxlib.lib 링크 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
C/C++에서 Lua 스크립트 실행 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua: 변수 동적 자료형 언어 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua: 주석 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua: 문장의 끝 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua: Assignment 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua: 변수의 종류 전역(global) 지역(local) 테이블 필드(table field) 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua: 자료형(data types) Nil 숫자 (내부적으로 double) 문자열 불리언 (true, false) 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua: 함수 함수도 하나의 자료형 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua: 함수 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua: 테이블 일종의 associative array (or hash table) C/C++의 배열 Lua의 테이블 정수형으로만 index로 사용 한 배열에는 같은 자료형만 저장 가능 Lua의 테이블 어떤 자료형으로도 index로 사용 한 테이블에 여러 자료형을 혼합 저장 가능 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua: 테이블 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua: n차원 테이블 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua: n차원 테이블 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua: 테이블 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua: 논리 연산자 C/C++: &&, ||, ! Lua: and, or, not false와 nil을 제외한 값은 참 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua: 조건 구조 If while 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua: 조건 구조 repeat for 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua: 조건 구조 For 테이블에서의 for k: key v: value 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua: 조건구조 테이블에서의 for 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua로 가위바위보 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua로 가위바위보 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua로 가위바위보 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
C/C++과 인터페이스하기 가상 스택(virtual stack)을 사용하여 통신 문자열 “Captain Hook”이 Lua 스크립트의 변수 Pirates_Name에 저장되어 있는 경우 1. C++ 함수는 Pirates_Name을 Lua 스택에 넣는다 2. Lua는 스택을 읽고 문자열 Pirates Name을 찾는다 3. Lua는 전역 테이블에서 Pirates_Name의 값을 찾고 그것에 지정된 값, 즉 “Captain Hook”을 스택에 넣는다 4. C++ 함수는 문자열 Captain Hook을 스택의 맨 위에서 가져간다 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
C/C++과 인터페이스하기 가상 스택 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
C++ 프로그램에서 Lua 전역변수 접근 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
C++ 프로그램에서 Lua 전역변수 접근 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
C++ 프로그램에서 Lua 전역변수 접근 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
C++ 프로그램에서 Lua 전역변수 접근 원하는 자료형이 스택에 있는가 검사 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
C++ 프로그램에서 Lua 전역변수 접근 C++자료형으로 변환 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
C++ 프로그램에서 Lua 전역변수 접근 하나의 수에 접근하기 위한 편의 함수 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
C++ 프로그램에서 Lua 테이블 접근 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
C++ 프로그램에서 Lua 테이블 접근 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
C++에서 Lua 함수에 접근 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
C++에서 Lua 함수에 접근 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua에서 C/C++ 함수에 접근 Lua에서 호출할 수 있는 함수 프로토타입 Int function_name(lua_State*) 위의 C/C++ 함수를 둘러싸는(wrapping) 래퍼(wrapper)함수 작성 Wrapper 안에서 매개변수를 스택에서 추출 원래 함수 호출 return 값을 스택에 삽입 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua에서 C/C++ 함수에 접근 Wrapper 함수 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua에서 C/C++ 함수에 접근 Wrapping 함수 작성 lua_register 함수를 사용하여 Lua에 등록 Lua_register(pL, “cpp_EvaluateTheGuesses”, cpp_EvaluateTheGuesses); 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua에서 C/C++ 함수에 접근 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua에서 C/C++ 함수에 접근 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua에서 C/C++ 클래스에 접근 클래스 데이터와 메소드를 원소로 가지는 Lua 테이블 생성 … 많은 작업량 Luabind 이용 ! 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Luabind Lua와 C++ 사이의 바인딩(binding)을 생성하기 위한 라이브러리 상속 및 템플릿 클래스 지원 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Luabind 기본 사용 구조 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Luabind 범위(Scope) Luabind를 통하여 등록되는 함수나 클래스의 scope를 결정 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Luabind를 이용한 C/C++ 함수 접근 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Luabind를 이용한 C/C++ 함수 접근 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Luabind를 이용한 C/C++ 함수 접근 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Luabind를 이용한 C++ 클래스 접근 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Luabind를 이용한 C++ 클래스 접근 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Luabind를 이용한 C++ 클래스 접근 파생된 클래스 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Luabind를 이용한 C++ 클래스 접근 파생된 클래스 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua에서의 클래스 생성 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
Lua에서의 클래스 생성 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
luabind::object 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀
스크립트 유한상태기계 새로운 AI 논리를 재컴파일 없이 즉각 테스트 디자이너, 아티스트 들도 AI 조정 가능 플레이어에게 게임 인진의 능력 부여 어느 부분을 스크립트로 노출할 것인가? ScriptedStateMahine 프로젝트 참조 2008-05-06 게임인공지능 - 제 5장 그래프의 비밀