Unity3D 게임 개발 데이터 지구 화 PlayerPrefs 의 용법 상세 설명

소 편 은 오늘 유 니 티 3D 에서 의 데이터 지속 화 문 제 를 연구 했다.데이터 의 지속 화 는 모든 개발 분야 에서 주목 할 만 한 문제 이다.작은 응용 프로그램 에서 파일 의 읽 기와 쓰기,큰 데이터 베이스 관리 유지 까지 데이터 의 지속 화 된 모습 을 볼 수 있다.소 편 은'C\#Linq 와 반사 기반 데이터 지구 화 프레임 워 크 Xml4DB'라 는 글 에서 블 로 거들 이 겨울방학 동안 개발 한 Xml4DB 프레임 워 크 를 소 개 했 는데 이것 은 Xml 기반 경량급 데이터 지구 화 프레임 워 크 로 대상 을 대상 으로 하 는 방식 으로 데 이 터 를 처리 할 수 있다.데이터 의 지속 화 는 어떤 의미 에서 볼 때 직렬 화 와 반 직렬 화 과정 이다..NET 에서 우 리 는 대상 을 Xml,JSon,바 이 너 리 로 정렬 할 수 있다.그리고 반 서열 화 를 통 해 대상 을 다시 얻는다.마찬가지 로 Android 에서 우 리 는 Preferences 를 사용 하여 키 형 데 이 터 를 저장 하여 데이터 의 지속 화 를 실현 할 수 있 습 니 다(물론 다른 방식 도 있 습 니 다.여 기 는 키 형 데 이 터 를 강조 하기 위 한 것 입 니 다).그렇다면 유 니 티 3D 에 서 는 데이터 의 지속 화 를 어떻게 실현 할 것 인가?여러분 저 와 함께 오늘 의 글 에 들 어 오 세 요:[Unity3D]Unity3D 게임 개발 의 데이터 지구 화 PlayerPrefs 사용
우선 유 니 티 3D 두 단락 에서 데이터 읽 기와 쓰 기 를 실현 하 는 간단 한 코드 를 살 펴 보 자.

 //    
 PlayerPrefs.SetString("Name",mName);
 PlayerPrefs.SetInt("Age",mAge);
 PlayerPrefs.SetFloat("Grade",mGrade)

 //    
 mName=PlayerPrefs.GetString("Name","DefaultValue");
 mAge=PlayerPrefs.GetInt("Age",0);
 mGrade=PlayerPrefs.GetFloat("Grade",0F);
위의 두 단락 의 코드 를 통 해 우 리 는 두 가 지 를 발견 할 수 있다.
1.Unity3D 의 데이터 지속 화 는 키 값 으로 저장 되 며 사전 으로 볼 수 있 습 니 다.
2.Unity3D 중간 값 은 키 이름 을 통 해 읽 습 니 다.값 이 존재 하지 않 을 때 기본 값 을 되 돌려 줍 니 다.
현재 Unity3D 에 서 는 int,string,float 세 가지 데이터 형식 만 읽 을 수 있 기 때문에 우 리 는 이 세 가지 데이터 형식 으로 간단 한 데 이 터 를 저장 할 수 있 습 니 다.현재 Unity3D 에서 데이터 의 지속 화 에 사용 되 는 클래스 는 layer Prefs 입 니 다.주요 한 클래스 방법 은 다음 과 같 습 니 다.

 static function DeleteAll(): void
   :             ,       。
 
 static function DeleteKey(key: string): void
   :        key      。
 
 static function GetFloat(key: string, defaultValue: float=OF): float
   :    ,       key    .     ,    defaultValue。
 
 static function GetInt(key: string, defaultValue: int): int
   :       key    ,    .     ,    defaultValue。
 
 static function GetString(key: string, defaultValue: string=**): string
   :       key    ,    .     ,    defaultValue.
 
 static function HasKey(key: string): bool
   :         key    .
 
 static function SetFloat(key: string, value: float): void
   :   key    .
 
 static function SetInt(key: string, value: int): void
   :   key    .
 
 static function SetString(key: string, value: string): void
   :   key    .
자,layer Prefs 의 주요 방법 을 알 아 본 후에 우 리 는 구체 적 인 예 를 들 어 Unity 3D 에서 데이터 의 지속 적 인 실현 을 배 웠 습 니 다.우 리 는 한 장면 에서 정 보 를 입력 하여 새로운 장면 에서 정 보 를 읽 을 수 있 도록 하고 싶 습 니 다.우 리 는 두 장면 을 직접 만 들 었 는데 각각 Scene 0,Scene 1(프로그래머 의 수 는 모두 0 에서 시작 되 었 다 고 합 니 다.하하)이 라 고 명명 되 었 고 장면 에서 메 인 카 메 라 를 유지 하면 됩 니 다.다음 에 우 리 는 각각 두 장면 을 위해 스 크 립 트 를 작성 합 니 다.
첫 번 째 장면 의 스 크 립 트:

using UnityEngine;
using System.Collections;
 
public class Scene1Script : MonoBehaviour {
	
	//  
	private string mName="   ";
	//  
	private int mAge=20;
	//  
	private float mGrade=75.5F;
	
	void OnGUI()
	{
		GUILayout.Label("Unity3D        ",GUILayout.Height(25));
		//  
		GUILayout.Label("     :",GUILayout.Height(25));
	 mName=GUILayout.TextField(mName,GUILayout.Height(25));
		//  
		GUILayout.Label("     :",GUILayout.Height(25));
	 mAge=int.Parse(GUILayout.TextField(mAge.ToString(),GUILayout.Height(25)));
		//  
		GUILayout.Label("     :",GUILayout.Height(25));
	 mGrade=float.Parse(GUILayout.TextField(mGrade.ToString(),GUILayout.Height(25)));
		
		//    
		if(GUILayout.Button("    ",GUILayout.Height(25)))
		{
		 //    
		 PlayerPrefs.SetString("Name",mName);
		 PlayerPrefs.SetInt("Age",mAge);
		 PlayerPrefs.SetFloat("Grade",mGrade);
		 
		 //      
			Application.LoadLevel("Scene1");
		}
	}
}
두 번 째 장면 의 스 크 립 트:

using UnityEngine;
using System.Collections;
 
public class Scene2Script : MonoBehaviour {
 
	private string mName;
	private int mAge;
	private float mGrade;
	
	void Start () 
	{
	 //    
	 mName=PlayerPrefs.GetString("Name","DefaultValue");
	 mAge=PlayerPrefs.GetInt("Age",0);
	 mGrade=PlayerPrefs.GetFloat("Grade",0F);
	}
	
	void OnGUI()
	{
	 GUILayout.Label("Unity3D        ",GUILayout.Height(25));
	 //  
	 GUILayout.Label("  :"+mName,GUILayout.Height(25));
	 //  
	 GUILayout.Label("  :"+mAge,GUILayout.Height(25));
	 //  
	 GUILayout.Label("  :"+mGrade,GUILayout.Height(25));
		
	 //    
	 if(GUILayout.Button("    ",GUILayout.Height(25)))
	 {
   PlayerPrefs.DeleteAll();
	 }
		
	 //  Scene0
	 if(GUILayout.Button("    ",GUILayout.Height(25)))
	 {
   Application.LoadLevel("Scene0");
	 }
		
	}
}
우 리 는 스 크 립 트 를 카메라 에 직접 연결 한 다음 에 프로젝트 를 컴 파일 합 니 다.두 장면 을 컴 파일 시퀀스 에 넣 는 것 을 주의 하 십시오.우 리 는 프로그램 을 실행 합 니 다.

좋은 웹페이지 즐겨찾기