- 주제
>> JSON으로 위치 정보 저장
(PlayerData.cs)
>> S 키를 눌러 현재 위치 저장
(PlayerController.cs)
>> 게임 재시작 시 저장된 위치로 플레이어 이동
(PlayerController.cs)
- 공부내용
1. JSON으로 위치 정보 저장
JSON이란?
JSON(JavaScript Object Notation)은 인터넷에서 자료를 주고받을 때 그 자료를 표현하는 방법.
먼저 JSON 데이터를 유니티에서 쉽게 처리하기 위해, 필요한 라이브러리를 설치해야한다.
(Unity Package Manager에서 'Json.Net for Unity' 패키지 설치)
PlayerData.cs
: 플레이어의 위치 정보를 저장하고 불러옴(위치 정보는 JSON 형식으로 변환되어 파일로 저장됨)
using UnityEngine;
using Newtonsoft.Json;
using System.IO;
public class PlayerData
{
public float positionX;
public float positionY;
public float positionZ;
// 플레이어 위치 저장 함수
public static void SavePlayerPosition(Vector3 position)
{
PlayerData data = new PlayerData();
data.positionX = position.x;
data.positionY = position.y;
data.positionZ = position.z;
// JSON 형식으로 변환
string json = JsonConvert.SerializeObject(data);
// JSON 파일로 저장
File.WriteAllText(Application.persistentDataPath + "/playerData.json", json);
}
// 플레이어 위치 로드 함수
public static Vector3 LoadPlayerPosition()
{
string path = Application.persistentDataPath + "/playerData.json";
if (File.Exists(path))
{
// JSON 파일에서 데이터 읽기
string json = File.ReadAllText(path);
PlayerData data = JsonConvert.DeserializeObject<PlayerData>(json);
// 벡터3로 변환하여 반환
return new Vector3(data.positionX, data.positionY, data.positionZ);
}
else
{
// 저장된 데이터가 없을 경우 기본 위치 반환
return Vector3.zero;
}
}
}
2. S 키를 눌러 현재 위치 저장
PlayerController.cs
: 게임에서 'S' 키를 눌렀을 때, 현재 위치를 저장한다.
'Update' 메서드를 이용하여 키 입력을 감지 -> 'SavePlayerPosition' 메서드 호출
'SavePlayerPosition' 메서드란?
현재 플레이어의 위치를 Vector3 형식으로 받아와 JSON 파일로 저장.
using UnityEngine;
public class PlayerController : MonoBehaviour
{
// Update 메서드에서 매 프레임마다 호출됨
void Update()
{
// S 키를 누를 때 위치 저장
if (Input.GetKeyDown(KeyCode.S))
{
PlayerData.SavePlayerPosition(transform.position);
Debug.Log("Player position saved: " + transform.position);
}
}
}
3. 게임 재시작 시 저장된 위치로 플레이어 이동
PlayerController.cs
: 'Start' 메서드에서 'LoadPlayerPosition' 메서드를 호출한다.
'LoadPlayerPosition' 메서드란?
저장된 JSON 파일을 읽어와 'Vector3' 형식으로 변환한 후 반환,
저장된 파일이 없으면 기본 위치(0, 0, 0)를 반환.
using UnityEngine;
public class PlayerController : MonoBehaviour
{
// 게임 시작 시 호출되는 메서드
void Start()
{
Vector3 savedPosition = PlayerData.LoadPlayerPosition();
// 저장된 위치로 플레이어 이동
if (savedPosition != Vector3.zero)
{
transform.position = savedPosition;
Debug.Log("Player position loaded: " + savedPosition);
}
}
}
'🌐 유니티 (Unity)' 카테고리의 다른 글
Day 37 - 3D 건축 시스템 (0) | 2024.06.04 |
---|---|
Day 36 - AI 네비게이션 (0) | 2024.06.03 |
Day 34 - ScriptableObject & (프리팹 또는 GUID) (0) | 2024.05.29 |
Day 33 - 3D 게임(해와 달) (0) | 2024.05.28 |
Day 32 - 동기와 비동기(Coroutine) (0) | 2024.05.27 |