1. PlayerPrefs를 이용한 간단한 세이브 시스템
PlayerPrefs는 간단한 데이터를 저장하는 데 유용한 시스템으로, 플레이어의 진행 상황(대화 ID, 선택된 옵션 등)을 저장하고 불러오는 데 사용할 수 있습니다. 하지만 PlayerPrefs는 소규모 데이터 저장에 적합하므로, 매우 복잡한 데이터 구조에는 적합하지 않을 수 있습니다.
1) 진행 상태 저장하기
대화가 진행될 때마다 현재 대화의 ID를 저장합니다.
using UnityEngine;
public class DialogueManager : MonoBehaviour
{
private int currentId = 1; // 현재 대화 ID
void Start()
{
LoadGame(); // 게임 시작 시 진행 상황 불러오기
DisplayDialogue(currentId);
}
void DisplayDialogue(int id)
{
// 현재 대화 표시 로직
}
public void OnOptionSelected(int nextId)
{
// 선택된 다음 대화로 이동
currentId = nextId;
DisplayDialogue(currentId);
SaveGame(); // 선택 후 진행 상황 저장
}
// 게임 저장 함수
void SaveGame()
{
PlayerPrefs.SetInt("SavedDialogueID", currentId); // 현재 대화 ID 저장
PlayerPrefs.Save();
Debug.Log("게임 저장 완료: 대화 ID " + currentId);
}
// 게임 불러오기 함수
void LoadGame()
{
if (PlayerPrefs.HasKey("SavedDialogueID"))
{
currentId = PlayerPrefs.GetInt("SavedDialogueID"); // 저장된 대화 ID 불러오기
Debug.Log("게임 불러오기 완료: 대화 ID " + currentId);
}
else
{
Debug.Log("저장된 진행 상황이 없습니다.");
}
}
}
2) 게임 재시작 시 불러오기
LoadGame() 함수는 게임이 시작될 때 자동으로 저장된 진행 상황을 불러옵니다. PlayerPrefs.HasKey("SavedDialogueID")로 저장된 데이터가 있는지 확인하고, 있다면 불러오고, 없다면 처음부터 시작합니다.
3) 게임 저장 및 불러오기 정리
- SaveGame(): 진행 상황(대화 ID)을 PlayerPrefs에 저장.
- LoadGame(): 저장된 대화 ID를 불러와 해당 지점부터 게임을 시작.
이 방법은 간단한 세이브 기능을 제공하며, 작은 데이터(숫자, 문자열 등)를 저장하는 데 유용합니다.
2. JSON 파일을 이용한 세이브 시스템
PlayerPrefs보다 더 복잡한 데이터를 저장하고 싶다면, JSON 파일을 이용하는 방법도 있습니다. JSON은 게임 데이터(대화 ID, 플레이어 선택 등)를 파일로 저장하여 나중에 불러올 수 있게 합니다.
1) 데이터 클래스 정의
먼저, 저장할 데이터를 하나의 클래스에 정의합니다. 예를 들어, 현재 대화 ID와 다른 데이터를 저장할 수 있습니다.
[System.Serializable]
public class GameData
{
public int currentDialogueId; // 현재 대화 ID
public string playerName; // 플레이어 이름 (예시로 추가)
}
2) 데이터 저장 함수 작성
게임 데이터를 JSON 형식으로 저장하기 위해 SaveGame() 함수를 작성합니다.
using System.IO;
using UnityEngine;
public class DialogueManager : MonoBehaviour
{
private int currentId = 1; // 현재 대화 ID
private string savePath;
void Start()
{
savePath = Application.persistentDataPath + "/gameSave.json"; // 저장 파일 경로 설정
LoadGame(); // 게임 시작 시 진행 상황 불러오기
DisplayDialogue(currentId);
}
void DisplayDialogue(int id)
{
// 현재 대화 표시 로직
}
public void OnOptionSelected(int nextId)
{
// 선택된 다음 대화로 이동
currentId = nextId;
DisplayDialogue(currentId);
SaveGame(); // 선택 후 진행 상황 저장
}
// 게임 저장 함수 (JSON 파일로 저장)
void SaveGame()
{
GameData data = new GameData();
data.currentDialogueId = currentId;
string json = JsonUtility.ToJson(data); // 데이터를 JSON 문자열로 변환
File.WriteAllText(savePath, json); // JSON 파일로 저장
Debug.Log("게임 저장 완료: " + json);
}
// 게임 불러오기 함수
void LoadGame()
{
if (File.Exists(savePath))
{
string json = File.ReadAllText(savePath); // 저장된 JSON 파일 불러오기
GameData data = JsonUtility.FromJson<GameData>(json); // JSON 문자열을 객체로 변환
currentId = data.currentDialogueId; // 저장된 대화 ID 불러오기
Debug.Log("게임 불러오기 완료: 대화 ID " + currentId);
}
else
{
Debug.Log("저장된 진행 상황이 없습니다.");
}
}
}
3) 저장된 데이터 파일 경로
- Application.persistentDataPath는 운영 체제에 상관없이 저장 파일을 안전하게 저장할 수 있는 경로입니다.
- 이 경로에 gameSave.json 파일을 생성하여 데이터를 저장하고 불러옵니다.
4) 게임 저장 및 불러오기 정리
- SaveGame(): 현재 대화 ID를 포함한 게임 데이터를 gameSave.json 파일로 저장합니다.
- LoadGame(): 저장된 JSON 파일을 불러와 진행 상황을 복원합니다.
이 방법은 게임 데이터를 더 세밀하게 저장할 수 있으며, 복잡한 구조의 데이터를 저장하거나 복수의 데이터를 저장할 때 유용합니다.
3. 세이브 시스템 선택 가이드
- PlayerPrefs: 간단한 값(숫자, 문자열 등)을 저장할 때 사용하기 편리하며, 소규모 데이터에 적합합니다. 예를 들어, 진행 상황, 점수, 설정 값 등을 저장할 때 적합합니다.
- JSON 파일: 복잡한 데이터를 저장하고 관리해야 할 때 사용하면 좋습니다. 특히 대화 ID뿐만 아니라 플레이어의 다양한 상태(아이템, 퀘스트 진행도 등)를 저장하려는 경우 JSON 파일이 더 유연하고 확장성이 좋습니다.
'개인 프로젝트' 카테고리의 다른 글
ui구현 (0) | 2024.09.14 |
---|---|
채팅내에 이미지 삽입 (0) | 2024.09.14 |
대사 관리 (0) | 2024.09.14 |
채팅형 스토리 게임- 유니티 기반 단계 설명 (1) | 2024.09.14 |
기획서작성 (0) | 2024.08.28 |