유니티 스크립터블 오브젝트 ( Unity Scriptableobject )


참고 : http://archive.fo/5Mifm



저장하고 싶은 형식을 가지고있는 ScriptableObject를 상속받는 스크립트를 만든다.

추가적으로 CSV파일 등에서 데이터를 로드해서 자신의 변수에 저장하는 함수도 만든다. 



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
 
// 에디터에서 프리팹에다가 값을 넣어놓고 싶을때 사용하기위해 임시로 제작
[CreateAssetMenu]
public class ScriptableDataBase : ScriptableObject
{
    [SerializeField]
    public List<CharacterBase.CharStruct> Machiknight_Base;
    [SerializeField]
    public List<CharacterBase.CharStruct> Enemy_Base;
    
    public void LoadDataAll()
    {
        ReadCharData("knight_Base.csv", Base);
        ReadCharData("Enemy_Base.csv", Enemy_Base);
    }
    
    public void ReadCharData(string fileName, List<CharacterBase.CharStruct> Datalist )
    {
        // 데이터 불러오는 부분
    }
}
 
cs



에디터 스크립트도 만들어서 붙여준다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
 
[CustomEditor(typeof(ScriptableDataBase))]
 
public class ScriptableDataBaseEditor : Editor
 
{
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();
 
        ScriptableDataBase myScript = (ScriptableDataBase)target;
 
        if (GUILayout.Button("Resource폴더로부터 업데이트"))
        {
            myScript.LoadDataAll(); // 시트로부터 업데이트
        }
    }
}
 
cs



Resources폴더에서 오른쪽클릭해서 Create 해주고 버튼을 누르면 CSV 파일등에서 로드된 데이터가 ScriptableDataBase에 저장된다.



나중에 사용할때는


 ScriptableDataBase _ScriptableDataBase = Resources.Load("ScriptableDataBase") as ScriptableDataBase;


과 같이 불러오면 된다.

댓글

Designed by JB FACTORY