게임에 스크립팅 언어를 어떻게 추가합니까?


25

C ++로 작성된 게임이 있다고 가정 해 봅시다. 그러나 모딩 또는 스크립팅 기능을 추가하고 싶습니다. 게임에 스크립팅 기능을 추가하는 방법은 무엇입니까?


가장 많이 사용되는 언어 : Lua (프로그래밍 언어)Lua (프로그래밍 언어) 참조 -C API 예 : IBM은 이에 대한 훌륭한 기사를 제공합니다. LUA 포함
Tamara Wijsman

정확한 단계는 추가하려는 언어에 따라 다릅니다. gamedev.stackexchange.com/questions/11/…를
tenpn

답변:


27

우선, 게임의 어느 부분을 스크립트할지 결정해야합니다. 한 가지 옵션은 시간이 중요한 백엔드 작업이 C ++로 코딩되지만 모든 게임 논리는 스크립팅 언어로되어 있다는 점에서 완전히 스크립팅 된 게임을하는 것입니다. 디자이너는 백엔드를 고급 스크립팅 언어에서 호출 된 API로 사용합니다. 다른 극단적 인 경우, 사용자 인터페이스 나 스크립트 시퀀스와 같은 스크립트가 사용되는 특정 장소는 거의 없으며 대부분의 게임 코드는 여전히 C ++입니다. 각 접근 방식 (속도, 유연성, 컴파일 시간, 게임 범위 등)에는 이점이 있지만 미리 결정해야합니다.

스크립팅 사용 방법을 알고 나면 기존 스크립팅 언어를 사용할지 또는 고유 한 도메인 별 언어 를 사용할지 결정해야합니다 . 오늘날 다양한 디자인 목표와 대상을 가진 많은 스크립팅 언어가 있으므로 더 이상 자신 만의 것을 만들 가치가 있는지 확실하지 않습니다. 직접 구현하기로 결정한 경우 다음 리소스가 있습니다.

Lua 는 널리 사용되는 가볍고 포함하기 쉬운 스크립팅 언어입니다. 호스트와 임베디드 언어 간의 통신을 위해 스택을 사용하며 많은 전문 게임 에서 성공적으로 사용되었습니다 . Sol2 는 Lua 및 C ++ 바인딩 프로세스를 단순화합니다. Lua의 구문을 좋아하지 않는다면 Moonscript 는 Lua로 컴파일되고 멋진 기능을 추가하는 언어입니다.

다른 옵션으로는 AngelCode 가 있으며 C 및 C ++ 함수를 직접 호출 할 수 있습니다. PythonRuby 는 포함하기가 조금 더 복잡하지만 프로그래밍하기가 매우 즐겁습니다. Python을 포함하려면 Boost.Python을 살펴보십시오 . 또 다른 아이디어는 브라우저 용으로 개발 된 빠른 스크립팅 엔진을 활용하기 위해 JavaScript를 포함시키는 것입니다 ( V8SpiderMonkey 참조 ).


2
현재 게임 프로젝트에 스크립팅 언어를 구현했으며 주요 장점은 언어 프리미티브를 완전히 제어하는 ​​것입니다. 사전 빌드 된 스크립팅 솔루션은 일반적이므로 해당 기능이 제공하지 않을 수도 있습니다. 기존 솔루션보다 게임에 더 좋은 것을 만들 수 있다고 확신 하지 않는 한 자신의 언어를 구사하는 것에 대해 절대로 생각 해서는 안됩니다 .
Jon Purdy

개인적으로 나는 Guile을 좋아 한다. C와의 통합이 매우 빠르다. 문제는 속도이지만, 앞으로 몇 달 안에 2.0 버전으로도 개선 될 것이다.
Joe D

훌륭한 답변입니다. 첫 번째 단락은 "게임 개발자가 컨텐츠에 사용되는 API를 작성합니다."라고 요약 할 수 있습니다.
ashes999

사용자 지정 언어 (스크립팅 또는 기타)의 일반적인 용어는 DSL이며, 읽고 싶은지 아는 데 도움이됩니다.
Patrick Hughes

2

나는 DragonFire SDK를 사용하여 게임에 GameMonkey 스크립트를 삽입 대한 게시물을 작성한 사람 여기 .

기본적으로 아이디어는 C \ C ++ 함수를 선택한 스크립팅 언어에 노출시키고 스크립트에서 사용하는 것입니다. 튜토리얼에서 DragonFire SDK의 두 가지 기능을 공개했습니다. 게임을 시작할 때 스크립트에서 onStart 함수를 호출하고 업데이트 할 때 스크립트에서 onTimer 함수를 호출합니다.

희망이 도움이됩니다!


1
나는 또한 비디오 데모를 여기에 올렸다
astk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.