반응형
이 카테고리는 고도 엔진(Godot Engine) 관련 문법을 기록하고 저장하기 위해 만든 공간입니다.
이번에는 '파일 입출력(FileAccess): 게임 데이터 저장하고 불러오기'입니다.
예를 들면 플레이어가 열심히 모은 골드, 현재 레벨, 인벤토리 아이템 등은 게임을 종료하면 메모리에서 전부 사라집니다. 다음번에 게임을 다시 켰을 때 기존 데이터를 안전하게 이어서 플레이할 수 있도록 하려면 데이터를 하드디스크나 스마트폰 저장소에 '파일'로 저장하고 다시 읽어와야 합니다. 고도 4에서는 FileAccess 객체를 사용해 이를 매우 쉽게 처리할 수 있습니다.
1. user:// 경로와 데이터 저장하기 (WRITE)
고도 엔진에서 게임 데이터를 저장할 때는 보안과 운영체제별 권한 문제를 피하기 위해 반드시 user://로 시작하는 경로를 사용해야 합니다. 이는 고도 엔진이 각 OS에 맞춰 자동으로 지정해 주는 안전한 전역 저장 공간입니다.
GDScript
extends Node
var save_path = "user://save_data.dat"
func save_game():
# 1. 쓰기(WRITE) 모드로 파일을 엽니다. (파일이 없으면 새로 생성됨)
var file = FileAccess.open(save_path, FileAccess.WRITE)
if file:
# 2. 저장할 데이터를 딕셔너리 형태로 묶어줍니다.
var game_data = {
"player_level": 12,
"gold": 5000,
"player_name": "아더"
}
# 3. store_var() 함수로 데이터 구조를 통째로 저장합니다.
file.store_var(game_data)
print("게임 데이터 저장 완료!")
2. 안전하게 데이터 불러오기 (READ)
데이터를 불러올 때는 파일이 진짜 존재하는지 file_exists() 함수로 먼저 확인하는 것이 필수입니다. 파일이 없는데 읽으려고 하면 에러가 발생해 게임이 강제 종료될 수 있습니다.
GDScript
func load_game():
# 1. 파일이 존재하는지 검사합니다.
if not FileAccess.file_exists(save_path):
print("저장된 파일이 없습니다. 새로 시작합니다.")
return
# 2. 읽기(READ) 모드로 파일을 엽니다.
var file = FileAccess.open(save_path, FileAccess.READ)
if file:
# 3. get_var()로 저장했던 데이터를 그대로 복원합니다.
var loaded_data = file.get_var()
# 4. 불러온 데이터를 변수에 대입합니다.
var level = loaded_data["player_level"]
var gold = loaded_data["gold"]
print("불러오기 성공! 레벨: ", level, ", 골드: ", gold)
한눈에 보는 파일 입출력 핵심 요약
| 함수 / 키워드 | 기능 설명 | 게임 속 사용 예시 |
| user:// | 고도 엔진 전용의 안전한 사용자 데이터 저장 경로 | 모바일, PC 등 OS에 구애받지 않고 세이브 파일을 저장할 때 |
| FileAccess.open(경로, 모드) | 파일을 읽거나 쓰기 위해 여는 함수 | 세이브 데이터를 새로 기록하거나 불러오기 직전에 호출 |
| FileAccess.WRITE / READ | 파일을 열 때 설정하는 쓰기 / 읽기 권한 모드 | 데이터를 저장할 때는 WRITE, 불러올 때는 READ 사용 |
| FileAccess.file_exists(경로) | 지정한 경로에 파일이 실제로 존재하는지 체크 | 타이틀 화면에서 유저에게 '이어하기' 버튼을 활성화할지 판단할 때 |
| store_var() / get_var() | 딕셔너리, 배열 등 고도의 데이터 구조를 통째로 쓰고 읽음 | 캐릭터 능력치, 퀘스트 진행도 등 복잡한 데이터를 한 번에 관리할 때 |
반응형
'게임 > 고도엔진 문법' 카테고리의 다른 글
| 20. [고도 엔진] 에러 처리와 디버깅 팁 (assert, print_debug, 중단점 활용) (0) | 2026.07.08 |
|---|---|
| 18. [고도 엔진] 비동기 처리의 마법: 코루틴(Coroutine)과 await 키워드 (0) | 2026.07.06 |
| 17. [고도 엔진] 전역 변수처럼 쓰기: 싱글톤(Autoload) 설정 및 활용 (0) | 2026.07.05 |