확장 만들기
확장을 만들기 위해서는 먼저 자산 브라우저의 아무 곳에서나 오른쪽 클릭하고 Create -> Extension을 선택해야 합니다. 그러면 작업 공간에서 새로 생성된 자산의 확장 속성이 열립니다. 만약 이 창이 보이지 않는다면, 자산 브라우저에서 확장 자산을 더블 클릭하여 속성 창을 열거나 이미 열려 있는 경우 포커스를 맞출 수 있습니다.
이제 필요한 파일과 함수를 추가할 준비가 되었으며, 여기에서 확장 이름을 지정할 수 있습니다(일반적으로 문자/숫자만 사용하고 밑줄 "_" 외의 특수 기호는 사용하지 않습니다). 또한 원하는 경우 확장 버전 번호를 설정할 수 있습니다.
"Copies To" 아래에서 이 확장이 내보내질 플랫폼을 선택할 수 있습니다. 간단한 GML 확장의 경우 모든 플랫폼에서 실행되므로 걱정할 필요가 없지만, 플랫폼 전용 확장(예: Android용)을 만드는 경우 비호환 플랫폼(iOS, 콘솔 등)으로 내보내지 않도록 해야 합니다.
플레이스홀더 파일
새 확장에 파일을 추가하려면 메뉴 아이콘을 클릭하고 플레이스홀더 파일("Add Placeholder") 또는 대상 플랫폼에 필요한 실제 파일을 가져오는 옵션("Add File")을 선택해야 합니다.
"일반" 플레이스홀더는 특정 플랫폼에서 요구하는 파일을 제외한 모든 유형의 파일이 될 수 있으며, 주로 iOS 및 Android 확장에서 함수나 상수를 연결하는 "링커" 파일로 사용됩니다. 더 구체적인 사용을 위해 "GML" 및 "JS" 플레이스홀더 파일을 추가할 수도 있습니다.
파일 추가하기
일반적으로 iOS 및 Android용으로 빌드하지 않는 한 플레이스홀더를 사용할 필요가 없으므로, "Add File" 옵션을 선택하여 다음 파일 중 하나를 추가합니다:
파일 형식 | 설명 |
---|---|
.gml | GameMaker 언어로만 작성된 파일로 모든 플랫폼과 호환됩니다. |
.js | HTML5 대상에만 호환되는 JavaScript 확장 형식입니다. |
.dll | Windows 및 Xbox 대상에만 호환되는 동적 링크 라이브러리 확장 형식입니다. |
.dylib | Mac의 DLL에 해당하며 Mac 대상에만 호환됩니다(즉, iOS와는 호환되지 않음). |
.so | Linux의 DLL에 해당하며 Ubuntu(Linux) 대상에만 호환됩니다. |
.prx | PlayStation 대상에 기능을 추가하는 파일 형식입니다. |
Android나 iOS에 대한 파일 형식은 없는데, 이는 설정 방식이 약간 다르기 때문입니다. 일반 GML 확장을 만드는 방법을 살펴보겠습니다.
GML 확장 만들기
GML 확장을 위해 사용할 파일을 생성해야 합니다. GML 확장은 텍스트 파일(확장자는 .gml)로 저장되며, 다음과 같은 형식으로 작성됩니다:
#define c_alice_blue
return make_color_rgb(240,248,255);
#define instance_create_colour
var i = instance_create_layer(argument0, argument1, argument2, argument3);
with (i) {
image_blend = argument3;
}
return i;
각 섹션은 #define
호출로 시작하며, 위의 예제에서는 두 개의 함수를 정의하는 데 사용됩니다. 정의된 함수의 각 부분을 살펴보겠습니다:
#define
문은 주어진 이름으로 새 함수를 정의하는 데 사용됩니다.- 그 문 뒤에는 함수 코드가 이어지며,
argument0
,argument1
등의 변수를 사용하여 함수 호출 시 전달된 인수에 접근합니다. - 마지막에는
return
문이 있어 확장에서 GML 코드로 데이터를 반환합니다.
DLL 또는 JavaScript 확장을 작성하는 경우, 프로세스는 해당 확장 파일 형식에 맞는 올바른 언어로 유사하게 진행됩니다.
파일을 추가한 후에는 확장에 파일을 추가해야 하며("Add File" 옵션 사용), 그러면 파일 속성을 위한 새 창이 열립니다. 여기에서 확장의 대상 플랫폼을 선택하고(예: GML의 경우 모두 선택), 확장 파일의 이름을 바꾸고 몇 가지 세부 정보를 설정할 수 있습니다.
파일을 확장에 추가하면 프로젝트 디렉토리에 복사되므로, 게임에서 변경 사항이 보이려면 해당 복사본에서 변경해야 합니다. 복사본은 자산 브라우저에서 확장을 오른쪽 클릭하고 "Open in Explorer"를 선택하여 찾을 수 있습니다.
함수 추가하기
편집기는 GML 파일에 포함된 함수로 자동으로 채워져야 하지만, 그렇지 않은 경우 함수 메뉴 버튼을 클릭하여 수동으로 추가할 수 있습니다.
"Add Function"을 선택하면 확장에 함수를 추가할 수 있으며, 이 함수는 GameMaker에서 내장 함수처럼 호출할 수 있습니다. 함수가 추가되면 다음 창이 열려 함수 속성을 정의할 수 있습니다(함수를 더블 클릭하여 열 수도 있음).
위 이미지에서 우리는 GML 확장 파일에 정의된 instance_create_colour()
함수의 세부 정보를 함수 편집기에 채웠습니다. 함수에 대해 정의할 수 있는 각 옵션을 살펴보겠습니다:
- 함수에 이름을 지정할 수 있으며, 이는 프로젝트에서 함수를 호출할 때 사용됩니다.
- 도움말 텍스트를 정의할 수 있으며, 이는 코드 완성 팝업 및 코드 편집기 하단의 도우미 텍스트로 표시됩니다.
- 반환 유형을 정의할 수 있으며, 이는 실수형(double) 또는 문자열(string)일 수 있습니다. 외부 함수에서 반환되는 값이 없으면 이 부분은 중요하지 않습니다.
- 함수가 받을 인수를 정의할 수 있으며, 이 인수는 실수형 또는 문자열일 수 있습니다. 추가 및 제거 버튼을 클릭하여 인수를 추가하거나 제거할 수 있습니다.
- 함수가 가변 길이 인수를 받을 수 있는 경우, 하단의 "Variable Length Arguments" 체크박스를 선택해야 합니다.
함수가 Windows, Mac 또는 Ubuntu의 네이티브 확장에 속하고 인수가 4개를 초과하는 경우, 모든 인수는 동일한 유형이어야 합니다.
모든 작업을 마치면 함수는 프로젝트에서 사용할 준비가 되며, 이제 자동 완성에 표시되고 색상 코드도 적용됩니다. 정의된 함수는 Init 함수 또는 Final 함수로 설정할 수 있으며, 이는 게임이 시작될 때(Init) 또는 종료될 때(Final) 자동으로 호출됩니다. 모든 플랫폼은 Init 함수 호출을 지원하지만, 모든 플랫폼이 Final 함수 호출을 수행하지는 않습니다.
매크로
다른 옵션은 매크로를 만드는 것입니다. 매크로는 상수 값 또는 짧은 코드 조각이 될 수 있습니다. 매크로를 만들려면 확장 속성에서 "Macros" 버튼을 클릭하면 됩니다.
여기에서 매크로의 이름과 상수 값 또는 짧은 코드 줄을 입력할 수 있습니다. 매크로가 코드 줄인 경우 매크로가 호출될 때마다 평가됩니다.
확장 옵션 만들기
"Extension Options" 옆의 톱니바퀴 아이콘을 클릭하여 확장 옵션을 생성하거나 수정할 수 있습니다. 확인 프롬프트에서 "예"를 클릭하면 새 창이 열리며, 여기에서 새로운 확장 옵션을 추가할 수 있습니다.
각 확장 옵션에 이름, 기본값 및 데이터 유형을 지정할 수 있습니다. 이름은 확장 코드 내에서 옵션의 값을 검색하는 데 사용됩니다.
옵션을 추가하는 것 외에도 "Add Section"을 사용하여 섹션을 추가할 수 있습니다. 섹션은 옵션이 아니라 주제일 뿐이며, 많은 옵션이 있을 때 최종 사용자가 보는 옵션 목록을 정리하는 데 유용합니다.
다음 유형의 옵션을 생성할 수 있습니다:
옵션 유형 | 설명 |
---|---|
Boolean | true/false 체크박스를 생성합니다. |
Number | 실수형 숫자를 생성합니다. |
String | 텍스트 문자열을 생성합니다. |
FilePath | 파일 경로를 생성합니다. OS 탐색기를 사용하여 파일을 찾아볼 수 있습니다. |
FolderPath | 폴더/디렉토리 경로를 생성합니다. OS 탐색기를 사용하여 폴더를 찾아볼 수 있습니다. |
List | 미리 정의된 항목 목록에서 단일 항목을 선택할 수 있는 드롭다운을 생성합니다. |
옵션 옆의 톱니바퀴 아이콘을 클릭하여 선택적으로 표시 이름과 설명(표시 이름 위에 마우스를 올리면 툴팁으로 나타남)을 추가할 수 있습니다.
추가 창에서 이 옵션을 게임과 함께 번들된 options.ini
파일로 내보낼 수도 있습니다. 마지막으로, 편집기에서 옵션을 숨겨 최종 사용자가 확장을 사용할 때 보이지 않게 할 수 있습니다.
확장 옵션 사용하기
런타임에서 확장 옵션의 값을 검색하려면 확장 함수를 사용하면 됩니다. 또한 컴파일 배치 파일/스크립트 및 코드 주입 중에 식별자 YYEXTOPT_<ExtensionName>_<OptionName>
을 사용하여 확장 옵션을 검색할 수 있습니다(코드 주입 시 ${ }
로 감싸야 함). 이러한 옵션은 컴파일 시간에 실행되므로, 확장 옵션의 값은 문자열로 검색됩니다.
컴파일 배치 파일/스크립트에서 확장 버전 번호도 사용할 수 있으며, 이름은 GMEXT_<ExtensionName>_version
입니다. 현재 확장과 다른 확장에서는 확장 옵션을 사용할 수 없습니다. 확장 옵션은 런타임에서 해당 확장에 사용되는 함수가 있을 경우에만 사용할 수 있습니다. 그러나 옵션은 항상 INI 파일(옵션이 활성화된 경우) 및 배치 스크립트로 내보내집니다.
프록시 파일
여러 대상 플랫폼에서 작업할 때, 모든 플랫폼에서 작동하는 함수/매크로 집합만 있는 단일 확장을 생성할 수 있습니다. 이는 게임에 하나의 링크 라이브러리만 추가하고 다른 라이브러리를 확장 속성 창의 프록시 파일 목록에 배치하여 달성할 수 있습니다.
예를 들어, Windows 확장이 Haggis.dll
이라는 DLL을 가지고 있다고 가정해 보겠습니다. 이 DLL을 Mac의 DyLib로 복제하고 이름을 libHaggis.dylib
로 지정한 후 내부 함수 이름이 원래 Windows DLL과 일치하는지 확인합니다. 이 DyLib는 프록시 파일에 추가되고 Mac 대상에서 게임이 실행될 때 내보내도록 설정되며, GameMaker는 확장 함수가 호출될 때 자동으로 이를 사용합니다.
프록시 파일을 추가하려면 선택한 리소스 파일의 속성 창에서 버튼을 클릭하고 파일 위치를 찾아보면 됩니다. 추가한 후에는 확장의 대상을 업데이트하여 적절한 모듈을 추가해야 하며, 다음에 게임을 실행할 때 해당 플랫폼의 프록시로 포함됩니다. 프록시 파일을 제거하려면 선택한 프록시 파일을 제거하는 버튼을 클릭하면 됩니다.
프록시 파일을 추가하면 프로젝트의 Extensions 폴더에 복사되므로, 편집이 필요할 경우 게임과 함께 번들된 복사본을 편집해야 하며, 가져온 소스 파일은 편집하지 않아야 합니다. GameMaker는 컴파일을 위해 프로젝트에 있는 파일을 사용합니다.
명명 규칙
프록시 파일이 아래에 나열된 명명 규칙을 따르는 것이 매우 중요합니다. GameMaker는 이러한 이름을 분석하여 파일의 확장 및 이름에 따라 대상 모듈을 할당하고 자동으로 파일을 연결합니다. 이러한 규칙을 따르지 않으면 게임이 런타임에서 작동하지 않을 수 있습니다.
플랫폼 | 이름 규칙 |
---|---|
Windows 32bit Runtime | <Name>.dll , lib<Name>.dll |
Windows 64bit Runtime | <Name>_x64.dll , lib<Name>_x64.dll |
Ubuntu (Linux) | <Name>.so , lib<Name>.so , <Name>_linux.so , lib<Name>_linux.so , <Name>_arm.so , lib<Name>_arm.so , lib<Name>_linux_arm.so , <Name>_arm64.so , lib<Name>_arm64.so , lib<Name>_linux_arm64.so , <Name>_arm64-v8.so , lib<Name>_arm64-v8.so , lib<Name>_linux_arm64-v8.so , <Name>_armeabi-v7a.so , lib<Name>_armeabi-v7a.so , lib<Name>_linux_armeabi-v7a.so |
macOS | <Name>.dylib , lib<Name>.dylib |
HTML5 | <Name>.js |
PS4 | <Name>.prx , lib<Name>.prx , <Name>_ps4.prx , lib<Name>_ps4.prx |
PS5 | <Name>.prx , lib<Name>.prx , <Name>_ps5.prx , lib<Name>_ps5.prx |
Xbox One | <Name>.dll , <Name>_xboxone.dll |
Xbox Series X | S |
위의 규칙을 사용하여 <Name>
부분을 추가할 프록시 파일의 기본 이름으로 바꾸면 됩니다.