본문 바로가기
🌐 유니티 (Unity)

Day 35 - JSON (게임 재시작 시, 최근 저장한 위치에서 시작)

by shin0707 2024. 5. 31.
728x90

  • 주제

>> 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);
        }
    }
}
728x90

loading