2014년 1월 28일 화요일

unity3D, 데이터 저장하기

게임을 개발하다 보면 유저가 어디까지 진행했는지, 유저의 캐릭터가 얼만큼 성장했는지 등등을 저장해야 하는 시점이 오게 됩니다. 

가장 기본적으로 저장하는 방법은 PlayerPrefs을 사용해서 저장하는 방법이 있습니다. 

이것은 기본 데이터를 문자열키를 이용해서 같이 저장하게 해주는것인데요, 저장할 데이터가 작고 간단하다면 이 방법을 사용하는것이 가장 무난하고 좋습니다.

사용법은 아래의 코드를 살펴보세요.
using UnityEngine;
using System.Collections;

public class csTest : MonoBehaviour 
{
    int currentScore;
    int highScore;

    string currentPlayerName;
    string highScorePlayerName;

    void SaveData()
    {
        // 이런식으로 스트링키를 이용해서 값을 저장해줍니다.
        PlayerPrefs.SetInt("Score", currentScore);
        PlayerPrefs.SetInt("HighScore", currentScore);
        PlayerPrefs.SetString("HighScoreName", currentPlayerName);
    }

    void GetData()
    {
        // 필요한 데이터를 불러올때는 이렇게 키값으로 불러오게 되죠.
        highScore               = PlayerPrefs.GetInt("HighScore");
        highScorePlayerName     = PlayerPrefs.GetString("HighScoreName", "N/A");
    }
}

이렇게 구성후 정적클래스를 만들어서 관리하거나 싱글턴 클래스를 만들어서 관리할 수 있습니다. 

그런데 정적클래스로 만들면 인스펙터에서는 값을 조절할 수 없다는 단점이 있죠. 

인스펙터와 코드 모두에서 값을 조절하고 싶은 경우엔 아래의 예제 코드처럼 DontDestroyOnLoad 함수를 이용해서 가능하게 만들 수 있습니다. 
using UnityEngine;
using System.Collections;

public class csTest : MonoBehaviour 
{
    public static csTest current;

    public Transform somePrefabs;

    public int score;
    public string playerName;

    void Awake()
    {
        if (current != null && current != this)
        {
            Destroy(gameObject);
        }
        else
        {
            DontDestroyOnLoad(gameObject);
            current = this;
        }
    }
}

// 접근할때는 요렇게 접근합니다.
Transform x = csTest.current.somePrefabs;










댓글 없음:

댓글 쓰기