유니티

유니티 데이터 저장하기

작성자 정보

  • 마스터 작성
  • 작성일

컨텐츠 정보

본문

유니티에서 데이터를 저장하는 방법은 크게 3가지가 있습니다.

 

1.데이터베이스를 연결하여 저장하기

2.PlayerPrefs 이용하여 저장하기

3.Json, Xml 등을 사용하여 저장하기

 

1번의 경우 서버에 저장하기에 복잡하지만 데이터 조작을 막을수 있습니다.

2,3번의 경우 방법은 간단하지만 파일로 데이터를 저장하므로 유저가 데이터 조작을 할 수 있습니다.

 

1.데이터베이스를 연결하여 저장하기 (사용하기 어려움)

ㄴ 준비물 : 서버 및 MYSQL 필요, 서버 구축은 PHP가 쉬우니 추천함.

ㄴ.NET에 MySQL Connector/NET을 설치하기

 

using MySql.Data.MySqlClient;

 

namespace ExamMySQL

{

    public partial class Form1 : Form

    {

        string _server = "localhost"; //DB 서버 주소, 로컬일 경우 localhost

        int _port = 3308; //DB 서버 포트

        string _database = "new_schema"; //DB 이름

        string _id = "root"; //계정 아이디

        string _pw = "root"; //계정 비밀번호

        string _connectionAddress = "";

 

        public Form1()

        {

            InitializeComponent();

//MySQL 연결을 위한 주소 형식

            _connectionAddress = string.Format("Server={0};Port={1};Database={2};Uid={3};Pwd={4}", _server, _port, _database, _id, _pw);

    using (MySqlConnection connection = new MySqlConnection(_connectionAddress )){

 connection.Open(); 

 string query = "SELECT * FROM myTable;"; 

 MySqlCommand command = new MySqlCommand(query, connection); 

 using (MySqlDataReader reader = command.ExecuteReader()) { 

 while (reader.Read()) {

 Console.WriteLine($"{reader.GetInt32(0)}: {reader.GetString(1)}"); 

 } 

 }

    }

        }

 


}

}

 

 

connectionString: MySQL 서버 주소, 포트, 데이터베이스 이름, 사용자 이름, 비밀번호를 포함하고 있습니다. 

이 정보를 사용하여 데이터베이스에 연결합니다.

MySqlConnection: 데이터베이스와의 연결을 나타내고 관리하는 객체입니다.

MySqlCommand: 실행할 SQL 쿼리 또는 프로시저를 정의하고 데이터베이스와 연결하는 객체입니다.

MySqlDataReader: Select 쿼리의 결과를 읽을 수 있게 해주는 객체입니다. 

 

 

 

2.PlayerPrefs 사용하기 (사용하기 쉬움)

ㄴ PlayerPrefs 매서드들

  • void DeleteAll()   // 모든 키 지우기 (모든 데이터 제거)
  • void DeleteKey(string name)   // 해당하는 키값 지우기
  • bool HasKey(string name)   // 해당하는 키값 존재 유무 반환 
  • float GetFloat(string name)   // 해당하는 키의 float값을 반환
  • int GetInt(string name)   // 해당하는 키의 Int 값을 반환
  • string GetString(string name)   // 해당하는 키의 string 값을 반환
  • void SetFloat(string name, float value)   // 키의 이름과 값을 넘겨 저장하기 float
  • void SetInt(string name, int value)   // 키의 이름과 값을 넘겨 저장하기 int
  • void SetString(string name)   // 키의 이름과 값을 넘겨 저장하기 string
ㄴ PlayerPrefs 저장 경로


[Windows OS]

 애플리케이션 - (레지스트리) 레지스트리 HKCU/Software/[company name]/[product name]

 웹플레이어 - %APPDATA%/Unity/WebPlayerPrefs/[company name]/[product name]/


[Mac OS]

 어플리케이션 - ./Library/Preferences/

 웹 플레이어 - ./Library/Preferences/Unity/WebPlayerPrefs/

 

 

3.Josn, XML 사용하여 저장 (사용하기 쉬움)

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using System.IO; // 저장 등 파일 관리를 위해 추가


// 컨트롤러 클래스와 데이터 클래스 분리

public class PlayerController : MonoBehaviour

{

    /**PlayerController로서 필요한 변수와 메서드가 있다 **/

    public PlayerData playerData;


    [ContextMenu("To Json Data")] // 컴포넌트 메뉴에 아래 함수를 호출하는 To Json Data 라는 명령어가 생성됨

    void SavePlayerDataToJson()

    {

        // ToJson을 사용하면 JSON형태로 포멧팅된 문자열이 생성된다  

        string jsonData = JsonUtility.ToJson(playerData);

        // 데이터를 저장할 경로 지정

        string path = Path.Combine(Application.dataPath, "playerData.json");

        // 파일 생성 및 저장

        File.WriteAllText(path, jsonData);


    }

}

[System.Serializable]  // 예시 데이터이다. 

public class PlayerData

{

    public string name;

    public int age;

    public int level;

    public bool isDead;

    public string[] items;

}

 

[ContextMenu("From Json Data")]

void LoadPlayerDataFromJson()

{

    // 데이터를 불러올 경로 지정

    string path = Path.Combine(Application.dataPath, "playerData.json");

    // 파일의 텍스트를 string으로 저장

    string jsonData = File.ReadAllText(path);

    // 이 Json데이터를 역직렬화하여 playerData에 넣어줌

    playerData = JsonUtility.FromJson<PlayerData>(jsonData);

}

 ㄴ ContextMenu를 사용해 save기능과 load기능을 만들 수 있다. 

ㄴ 내가 원하는 위치 저장이 가능하다.

 

위의 3가지 방법중에 원하는 것을 선택하여 사용하는 것이 좋다. 

개인적으로 Json을 추천한다.

 


관련자료

댓글 0
등록된 댓글이 없습니다.

최근글


새댓글


알림 0