[ * 필자 Unity 버전 == 2020.3.6f1 ]
https://docs.unity3d.com/kr/2021.1/Manual/class-ScriptableObject.html
ScriptableObject
- class, Instance와 별도로 대량의 데이터를 저장하는 데 사용할 수 있는 데이터 컨테이너 에셋
* [ MonoBehaviour와 마찬가지로 unity 오브젝트에서 파생되나 gameobject에 직접 연결하는 것이 아닌 에셋으로 저장 ]
- 메모리 사용 감소
* [ 몬스터 prefab이 있고 prefab에 몬스터의 data를 직접 가지고 있다고 가정할 때 이를 여러 개 생성하면 몬스터 prefab이 각자의 data를 들고 있게 됨 -> 3마리 생성 -> 3개의 data 생성 == 여러 몬스터 => 여러 data 그러나 ScriptableObject를 사용하면 ScriptableObject하나를 참조하여 사용(메모리에 data사본을 하나만 저장 후 참조) -> 메모리 효율적 사용 ==> Data를 저장하는 prefab이나 공통적인 data를 ScriptableObject로 사용하는 게 좋음 ]
- 배포된 빌드에서는 ScriptableObject를 사용하여 data를 저장할 수 없으나(editor에서는 가능) 개발 시 설정한 ScriptableObject 에셋의 저장된 data를 사용할 수 있음
- Awake, OnEnable, OnDisable, OnDestroy의 콜백을 받음 (다만 ScriptableObject가 기준이 됨 -> ex ScriptableObject가 enable될때 OnEnable이 호출)
using UnityEngine;
[CreateAssetMenu(menuName = "ScriptableObject_/Player", order = 0)]
public class Player_ : ScriptableObject
{
public string name;
public int kill;
public void print()
{
Debug.Log(name);
Debug.Log(kill);
}
private void Awake()
{
}
private void OnEnable()
{
}
private void OnDisable()
{
}
private void OnDestroy()
{
}
}
ScriptableObject상속받고 사용
위처럼 asset을 생성하기 위해 [CreateAssetMenu(menuName = "ScriptableObject_/Player", order = 0)]
CreateAssetMenu -> Create안에 것들은 다 Asset들이지 그니까 이 menu에서 ScriptableObject asset을 생성하기 위해
menuName -> 말 그대로 Menu name인데 /를 통해 경로를 설정할 수 있음
* fineName도 설정 가능 - asset생성시 default file name임
order - ScriptableObject가 여러개일 경우 몇 번째에 보이게 할 것인지 설정
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ScriptableTest : MonoBehaviour
{
public Player_ playerData;
private void Start()
{
playerData.print();
}
}
이런 식으로 ScriptableObject를 가져와서 사용 가능함
이 정리는 그냥 기본적인 느낌만 보는 아주 간단한 예시이고
뭘 하든간에 공통으로 사용하는 Data를 따로 빼서 사용하기 참 좋을 것 같음
여러 같은 몬스터가 하나의 정보만 참조하고 있으면 메모리를 더 효율적으로 사용 가능할 것이니까 이런 느낌으로
'Unity > 개념 및 분석' 카테고리의 다른 글
Unity Sprite Atlas [ + Sprite Sheet과 차이는?, Sprite Packer 멈춰! ] (2) | 2021.07.14 |
---|---|
Unity Presets_사전 설정_자주 사용하는 거 미리미리 설정해버려 (0) | 2021.07.13 |
Visual Effect Graph( -> Create VFX) 간단한 개념 (1) | 2021.07.06 |
Unity Timeline [간단한 사용방법부터 Custom Playable까지] (0) | 2021.07.02 |
Unity Cinemachine [코딩 없는 카메라 연출] (0) | 2021.06.30 |