티스토리 뷰
반응형
#간단하게 안드로이드 환경에서 파일을 저장 및 구현 하는 방법을 알아보자
#헬퍼 클래스를 만들었고, unity package도 github을 통해 제공할 예정
-좌표(회전/위치)를 저장하는 클래스 정의
-로컬 저장소에서 파일을 저장/불러오기 구현
-저장시 object to json, 불러오기 때 json to object 구현
-샘플 파일 생성
#ObjectModel.cs
-좌표(회전/위치)를 저장하는 클래스 정의
-오브젝트 모델을 만들어서, 좌표를 저장하는 백터객체를 만들었다.
-Vector3를 쓰고싶었으나, json 객체 파싱이 되지 않기때문에 직접 클래스를 만들었다
public class InsObjectModel
{
public string Name { get; set; }
public InsVector position { get; set; }
public InsVector rotate { get; set; }
}
public class InsVector{
public InsVector(float x,float y, float z)
{
this.x = x;
this.y = y;
this.z = z;
}
public float x { get; set; }
public float y { get; set; }
public float z { get; set; }
}
#ConfigHelper.cs
-모든 기능이 다 정의되어있는 헬퍼 클래스
-대부분 주석으로 내용 설명을 다루고있다
-추가: Add()로 객체 생성하여 Add를 진행하면, 리스트에 등록된다.
-저장:SaveFile() 리스트에 있는 정보를 로컬저장소에 저장한다.
-읽기:GetListToFile() 로컬 저장소에 있는 정보를 읽어서, 리스트에 등록한다.
public class ConfigHelper
{
readonly string FILE_PATH = Application.persistentDataPath + "/coordinate.json";
List<InsObjectModel> list;
private static ConfigHelper _instance { get; set; }
public static ConfigHelper Instance
{
get
{
return _instance ?? (_instance = new ConfigHelper());
}
}
public ConfigHelper()
{
list = new List<InsObjectModel>();
}
/// <summary>
/// 저장소에있는 파일을 읽어서 스트링으로 반환한다
/// </summary>
/// <returns></returns>
string ReadFile()
{
if (CheckFile())
{
FileStream filestream = new FileStream(FILE_PATH, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(filestream, System.Text.Encoding.UTF8);
var parsingText = sr.ReadToEnd();
sr.Close();
filestream.Close();
return parsingText;
}
else
{
return string.Empty;
}
}
/// <summary>
/// 객체를 제이슨 스트링으로 변환하여, 파일에 저장한다
/// </summary>
public void SaveFile()
{
string json = ToJson();
WriteFile(json);
}
/// <summary>
/// 파일에 있는 제이슨을 읽어서, 객체로 파싱하여 반환한다
/// </summary>
/// <returns>객체리스트</returns>
public List<InsObjectModel> GetListToFile()
{
var msg = ReadFile();
return JsonConvert.DeserializeObject<List<InsObjectModel>>(msg);
}
/// <summary>
/// 현재 리스트를 반환한다
/// </summary>
/// <returns>오브젝트 리스트</returns>
public List<InsObjectModel> getList()
{
return list;
}
/// <summary>
/// 제이슨스트링을 내부저장소에 저장한다
/// </summary>
/// <param name="json">제이슨스트링</param>
void WriteFile(string json)
{
File.WriteAllText(FILE_PATH, json);
}
/// <summary>
/// 샘플
/// </summary>
/// <param name="name">오브젝트 이름</param>
public void MakeOject(string name)
{
InsObjectModel iom = new InsObjectModel();
iom.Name = name;
iom.position = new InsVector(Random.Range(1, 180), Random.Range(1, 180), Random.Range(1, 180));
iom.rotate = new InsVector(30.0f, 45.0f, 90.0f);
Add(iom);
}
/// <summary>
/// 추가
/// </summary>
/// <param name="item"></param>
public void Add(InsObjectModel item)
{
list.Add(item);
}
/// <summary>
/// 파일이 존재하는지 체크한다
/// </summary>
/// <returns>결과</returns>
public bool CheckFile()
{
return File.Exists(FILE_PATH);
}
/// <summary>
/// 리스트를 제이슨 스트링으로 변환한다
/// </summary>
/// <returns>제이슨 스트링</returns>
string ToJson()
{
return JsonConvert.SerializeObject(list);
}
}
#TestJson.cs
-실제로 헬퍼를 실행 해본다
public class TestJson : MonoBehaviour
{
void Start()
{
Debug.Log("################Start##############");
WriteLog();
SampleWrite();
Init();
WriteLog();
}
void Init()
{
Debug.Log("################GetListToFile##############");
ConfigHelper.Instance.GetListToFile();
}
public void SampleWrite()
{
Debug.Log("################Write 3 File##############");
ConfigHelper.Instance.MakeOject("오브젝트1");
ConfigHelper.Instance.MakeOject("오브젝트2");
ConfigHelper.Instance.MakeOject("오브젝트3");
InsObjectModel iom = new InsObjectModel();
iom.Name = "오브젝트4";
iom.position = new InsVector(Random.Range(1, 180), Random.Range(1, 180), Random.Range(1, 180));
iom.rotate = new InsVector(30.0f, 45.0f, 90.0f);
ConfigHelper.Instance.Add(iom);
ConfigHelper.Instance.SaveFile();
}
public void WriteLog()
{
Debug.Log("################list##############");
Debug.Log("################ list count: " + ConfigHelper.Instance.GetListToFile().Count+ "################");
}
}
해당 레포지토리에서 package파일을 받으면 된다.
https://github.com/gofogo2/unity-android-save-load-json.git
#jsontoobject #objecttojson #object #json #파싱 #저장 #불러오기 #유니티에서 파일 저장하기 #유니티에서 안드로이드 #파일 불러오기 #로컬저장소 #경로
반응형
'유니티(unity)' 카테고리의 다른 글
[unity/android] 유니티에서 export한 안드로이드 프로젝트 스플레쉬 스크린 없애기(Android 12버전) (0) | 2022.09.02 |
---|---|
[videoplayer/unity]유니티에서 비디오 플레이 시 전 영상 잠깐(깜빡/잔상) 보일때 (0) | 2022.08.29 |
[unity/android] 유니티에서 안드로이드 외부저장소 정리(persistentDataPath/streaming Asset) (0) | 2022.08.09 |
[unity/mediapipe] homuler/MediaPipeUnityPlugin 정상적으로 설치하기 (0) | 2022.07.29 |
[유니티/unity] 시스템 볼륨 제어하기/ 윈도우 볼륨 제어하기(win 32 dll 이용) (0) | 2022.03.24 |
댓글
반응형