티스토리 뷰

반응형

#간단하게 안드로이드 환경에서 파일을 저장 및 구현 하는 방법을 알아보자

 

#헬퍼 클래스를 만들었고, 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

 

GitHub - gofogo2/unity-android-save-load-json

Contribute to gofogo2/unity-android-save-load-json development by creating an account on GitHub.

github.com

 

#jsontoobject #objecttojson #object #json #파싱 #저장 #불러오기 #유니티에서 파일 저장하기 #유니티에서 안드로이드 #파일 불러오기 #로컬저장소 #경로

반응형
댓글
반응형