본문 바로가기
개발/Unity

유니티 - 스크립터블 오브젝트로 스크립트와 데이터 분리하기

by 피로물든딸기 2022. 7. 28.
반응형

Unity 전체 링크

 

Scriptable.cs는 여러 변수가 있다. 지금은 4개지만, 앞으로 점점 늘어날 것이고 데이터를 일일이 입력해줘야 한다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Scriptable : MonoBehaviour
{
    public int a;
    public float b;
    public string c;
    public Vector3 d;
}

 

이럴 경우 ScriptableObject를 사용하여 Data를 분리할 수 있다.

 

먼저 분리할 Data의 이름을 MyData라고 하고 Scriptable.cs에 추가해두자.

a ~ d 변수를 모두 mydata가 대신하게 된다.

public class Scriptable : MonoBehaviour
{
    MyData mydata;

    //public int a;
    //public float b;
    //public string c;
    //public Vector3 d;
}

 

스크립터블 오브젝트는 MonoBehaviour 대신 ScriptableObject를 상속한다.

그리고 MyData를 기반으로 mydata1, mydata2, mydata3 등을 만들어서 저장해야 한다.

CreateAssetMenu 속성으로 오브젝트를 생성하도록 추가한다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(menuName="MyScriptable", fileName="MyData")]
public class MyData : ScriptableObject
{
    public int a = 100;
    public float b;
    public string c = "Name";
    public Vector3 d;
}

 

그러면 Create 메뉴에 menuName="MyScriptable" 가 보인다. 

 

Assets에도 확인할 수 있다.

 

클릭하면 아래와 같이 Scriptable Object가 생성된다.

 

그리고 데이터를 Inspector에서 수정가능하다.

 

데이터를 xml, json 등으로 분리할 수도 있지만 매번 알맞은 에디터 창을 켜서 수정하기 때문에 불편하다.

이런 경우는 스크립터블 오브젝트가 유리할 수 있다.

 

MyData에 원하는 값을 수정한 후, Scriptable의 Mydata에 연결하면 된다.

 

Scriptable.cs 내부에서는 아래와 같이 접근할 수 있다.

 

이제 여러 개의 오브젝트에서 a, b, c, d를 모두 다르게 사용한다면 MyData를 여러 개 만들어서 관리하면 된다.

또는 하나의 스크립트에서 MyData[]로 여러 개의 데이터를 관리할 수도 있다.

 

Unity Plus:

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Unity Pro:

 

Unity Pro

The complete solutions for professionals to create and operate.

unity.com

 

Unity 프리미엄 학습:

 

Unity Learn

Advance your Unity skills with live sessions and over 750 hours of on-demand learning content designed for creators at every skill level.

unity.com

반응형

댓글