<div align="center">
<img src="https://raw.githubusercontent.com/sempitern0/indie-blueprint-docs/HEAD/icon.svg" alt="Logo" width="160" height="160">
<h1
angle더 견고한 솔루션은 <a href="https://github.com/sempitern0/barebone">Barebone template</a>에서 찾을 수 있습니다.</h1
angle
<h3 align="center">Indie Blueprint (WIP)</h3>
<p align="center">
이 블루프린트는 놀라운 인디 게임을 만드는 데 도움이 되는 필수 기능, 최적화된 설정 및 모범 사례를 포함합니다.
<br />
·
<a href="https://github.com/sempitern0/indie-blueprint/issues/new?assignees=sempitern0&labels=%F0%9F%90%9B+bug&projects=&template=bug_report.md&title=">버그 보고 (Report Bug)</a>
·
<a href="https://github.com/sempitern0/indie-blueprint/issues/new?assignees=sempitern0&labels=%E2%AD%90+feature&projects=&template=feature_request.md&title=">기능 요청 (Request Features)</a>
</p>
</div
angle
<br>
<br>
기타 플러그인 🎫
템플릿에서 새 저장소 만들기 📘
어떤 Godot 버전에 대해 어떤 브랜치를 선택해야 하는지 더 잘 이해하려면 다음 표를 참조하십시오:
템플릿으로 이동하여 새 저장소를 만드세요.
use_template
모듈 🧩
이 템플릿에는 개별적으로 완전히 기능하는 모듈들이 포함되어 있습니다. 이들은 프로젝트의 Project -> Plugins 탭에서 비활성화하거나 활성화할 수 있습니다.
특정 장소에 속하지 않은 일반 유틸리티이며, 씬 트리(scene tree)에 없더라도 언제든지 접근할 수 있는 정적 클래스(static classes)로 설정됩니다.
문서 보기
Audio
볼륨 조정, 재생 목록(playlists), 크로스페이딩(crossfading), 사운드 풀(sound pools)과 같은 기능을 통해 게임 오디오를 쉽게 제어할 수 있습니다.
문서 보기
Camera transition
이 카메라 전환 시스템을 사용하면 게임에서 2D/3D 카메라 간에 부드럽게 전환할 수 있습니다.
문서 읽기
씬(Scene) 전환
이 씬 전환기는 Godot 프로젝트에서 씬 스위칭을 구현하여 게임의 레벨 변화에 세련됨과 시각적 효과를 더해줍니다.
문서 읽기
전역 클럭(Global clock)
하루, 시간, 분을 조작하고 이 정보를 게임 전체에서 사용할 수 있습니다. 순식간에 게임용 주야 시스템을 만들고 걱정할 필요가 없습니다.
문서 읽기
오브젝트 풀(Object pool)
오브젝트 풀 패턴은 미리 초기화된 객체들의 집합('풀')을 준비 상태로 유지하여 필요할 때마다 할당하고 파괴하는 대신 사용하는 소프트웨어 생성 디자인 패턴입니다.
문서 읽기
RPG
역할 수행 게임(role playing games)을 구성하기 위한 기본적인 빌딩 블록으로 사용될 수 있는 컴포넌트 모음입니다.
문서 읽기
저장(Save)
이 저장 시스템은 Godot 프로젝트에서 저장 파일을 관리하는 편리한 방법을 제공합니다. 특정 게임 데이터에 맞게 확장할 수 있는 SavedGame 리소스를 활용합니다.
문서 읽기
설정(Configuration) ⚙️
이 템플릿은 최대한 활용하는 데 필요한 몇 가지 초기 설정을 포함하고 있습니다.
기본 버스 레이아웃(Default bus layout)
프로젝트에서 사용할 수 있는 기본 버스 레이아웃이 있으며, 이는 소규모~중규모 인디 게임에 충분합니다. 사용 사례에 따라 확장하거나 수정할 수 있지만, 여기를 시작점으로 삼기 좋습니다.
bus_layout
- 마스터(Master): 다른 모든 버스들이 상속받는 마스터 버스
- 뮤직(Music): 주로 게임에서 반복되는 음악을 재생하는 데 사용됨
- SFX/EchoSFX: 총성, 타격음, 발소리 등과 같은 음향 효과(Sound effects)입니다. 효과에 에코(echo) 효과를 추가하려면 "EchoSFX" 버스를 사용하세요.
- 보이스(Voice): 대화(Dialogues), AI 음성 효과, 숨소리 등.
- UI: 사용자 인터페이스 사운드, 버튼 클릭음, 호버(hover) 효과, 전환 애니메이션(transition animations) 등.
- 앰비언트(Ambient): 바람, 자연, 바다, 집 내부 및 기타 것들과 같은 주변 환경 사운드(Ambient sounds).
이 프로젝트는 게임에 번거롭게 간섭하는 것을 방지하기 위해 매우 간단한 미리 정의된 입력 맵을 제공합니다. MotionInput 헬퍼 클래스를 사용하면 훨씬 더 쉽게 사용할 수 있습니다.
- 모든 입력은 게임패드 지원 기능을 갖추고 있습니다.
- WASD 이동은 키
move_forward, move_back, move_right, move_left를 사용합니다.
- WASD 키는 기존의 UI 입력 맵인
ui_up, ui_down, ui_right, ui_left에 추가되었습니다.
- 입력 액션
debug_metrics Shift+P는 hardware_information.tscn이 씬 트리에 있을 때 성능 지표(performance metrics)를 열어줍니다.
P로 일시 정지합니다.
E로 상호작용합니다.
물리 레이어 (Physics layers) 2D 및 3D
- 레이어 1: 이름은 World입니다.
- 레이어 2: 이름은 Player입니다.
- 레이어 3: 이름은 Enemies입니다.
- 레이어 4: 이름은 Hitboxes이며,
hitboxes는 피해(damage) 또는 충격 시스템을 구현하기 위해 hurtboxes가 감지하는 충돌 영역입니다.
- 레이어 5: 이름은 Shakeables이며, 카메라에 흔들림 효과를 적용할 수 있는
TraumaCauser & TraumaDetector에서 사용됩니다.
- 레이어 6: 이름은 Interactables입니다.
- 레이어 7: 이름은 Grabbables입니다.
오토로드 (Autoloads) 🔽
오디오 관리, 전역 변수, 시그널(signals), 게임패드 지원, 영속성(persistence) 등 비디오 게임에서 공통으로 사용되는 작업을 위해 사용할 수 있는 여러 오토로드가 준비되어 있습니다.
GameGlobals 🗳️
이 싱글톤(singletons)은 노드 간에 데이터를 공유하는 역할을 하며, 항상 씬 트리에 존재하고 어디서든 접근할 수 있습니다. 이곳은 전역적으로 접근해야 하는 함수와 변수를 생성할 수 있는 곳입니다.
extends Node
const world_collision_layer: int = 1
...
Delay func
시간 간격만큼 함수 호출을 지연시킬 수 있습니다:
GameGlobals.delay_func(func(): print("test")), 1.5
...
Wait
코드의 어느 줄에서든 시간 지연을 만들 수 있습니다. wait 함수를 사용하기만 하면 됩니다:
GlobalGameEvents 🌐
GlobalGameEvents는 모든 노드나 스크립트가 연결할 수 있는 모든 전역 시그널을 포함합니다. 여러 노드가 리스닝해야 하는 이벤트는 여기에 배치해야 합니다.
Preloader
Preloader autoload는 preload 함수를 활용합니다. 이 autoload는 게임에 필요한 모든 에셋과 리소스를 중앙 집중화하는 장소입니다.
게임 초기화 시 한 번만 프리로드하고, 게임 내에서 항상 사용 가능하도록 만드세요.
Global Effects ✨
res://autoload/effects/global_effects.tscn에 위치한 GlobalEffects autoload에는 게임 개발에서 흔히 사용되는 몇 가지 화면 효과가 있어 빠르게 사용할 수 있습니다.
이 autoload 씬은 함수에 인수가 전달되지 않을 때 기본값으로 사용되는 몇 가지 파라미터를 포함합니다.
global_effects_parameters
Fade in & out
장면 전환이나 액션의 변화를 반영하는 데 광범위하게 사용됩니다. 효과가 완료되면 사용된 노드는 트리에서 제거됩니다.
func fade_in_out(
in_duration: float = default_fade_duration,
...
Flash
여러 번 사용할 수 있는 빠른 화면 색상 표시입니다. 효과가 완료되면 사용된 노드는 트리에서 제거됩니다.
func flash(
color: Color = default_flash_color,
duration: float = default_flash_duration,
...
프레임 동결 (Frame Freeze)
장면에서 프레임 동결을 시작하여 슬로우 모션 효과를 시뮬레이션할 수 있습니다. 시간 배율(time scale) (> 1이면 더 빠르고, < 1이면 느림), 지속 시간(duration)을 제공하고 오디오에도 프레임 동결 효과를 활성화할 수 있습니다.
프레임 동결은 하나만 활성화될 수 있으며, 다른 것을 시작하려면 완료되기를 기다려야 합니다.
func frame_freeze(
time_scale: float = default_frame_freeze_time_scale,
duration: float = default_frame_freeze_duration,
...
게임패드 컨트롤러 매니저 (Gamepad Controller Manager) 🎮
GamepadControllerManager는 연결된 게임 컨트롤러로부터 정보를 얻고 조작할 수 있게 해줍니다.
이 자동 로드는 주로 게임에 연결된 게임패드를 감지하는 데 도움을 줍니다. 액션 재매핑(actions remapping) 기능은 포함하고 있지 않으므로, 오직 감지에만 사용됩니다. 이 매니저는 조이가 연결되거나 연결 해제될 때를 자동으로 감지하고 현재 컨트롤러 이름을 업데이트합니다.
게임패드 이름에 대한 더 자세한 정보는 https://github.com/mdqinc/SDL_GameControllerDB에서 확인할 수 있습니다.
컨트롤러 연결 및 분리 (Controller connected & disconnected)
새롭거나 기존의 컨트롤러가 연결되거나 분리될 때 이 시그널들이 방출됩니다.
controller_connected(device_id, controller_name:String)
controller_disconnected(device_id, previous_controller_name:String, controller_name: String)
const DeviceGeneric = "generic"
const DeviceKeyboard = "keyboard"
const DeviceXboxController = "xbox"
...
var current_controller_guid
var current_controller_name := DeviceKeyboard
var current_device_id := 0
...
메서드 (Methods)
func has_joypad() -> bool
...
영속성 (Persistence) 💾
설정 매니저 (SettingsManager)
이 템플릿은 쉽게 확장 가능한 기본 구성을 가지고 있습니다. 이 구성은 선택에 따라 .ini 또는 .cfg 파일에 저장됩니다.
원칙적으로 이 자동 로드 기능은 자동으로 작동하며, 게임 진입 시와 종료 시 각각의 게임 설정을 저장하고 불러옵니다.
게임 설정 (Game settings)
이 옵션들은 IndieBlueprintGameSettings 파일에 정의되어 있으며, 각 설정 이름은 상수(constant)로 정의되고 기본값(default value)이 딕셔너리(dictionary)에 추가됩니다.
class_name IndieBlueprintGameSettings
...
시그널 (Signals)