Scritable Object
: 클래스 인스턴스와는 별도로 대량의 데이터를 저장하는데 사용할 수 있는 데이터 컨테이너
Unity에서 데이터를 저장하고 조직화하기 위한 스크립팅 클래스
주로 게임에서 리소스, 설정, 상태 등의 데이터를 저장하는 데 사용
변경되지 않는 데이터를 저장하는 MonoBehaviour 스크립트와 연결된 프리팹이 있는 프로젝트의 경우에 유용한데, 데이터를 일반 변수로 구현할 경우 인스턴스화 할 때마다 프리팹에 이 데이터에 대한 자체 사본이 생성된다.
Scriptable Object를 사용하여 메모리에 Scriptable Object의 데이터 사본만을 저장하며 이를 참조하는 방식으로 작동한다
게임 오브젝트에 Scriptable Object를 바로 연결할 수 없으며 프로젝트의 에셋으로 저장해야 한다.
씬과 독립적으로 에디터에서 생성되는 인스턴스
특정 씬에 종속되지 않고 여러 씬에서 공유될 수 있다
(씬 간의 데이터를 공유하거나 프로젝트 전반에 일관된 데이터를 사용할 때 편리)
런타임 중 에셋으로부터 데이터를 로드하거나 리소스 설정 등을 수정하고 업데이트 할 수 있다
//유니티에 메뉴 추가
//fimeName은 ScriptObject의 기본 파일 이름
//menuName은 오브젝트를 생성할 수 있는 메뉴의 경로 설정
[CreateAssetMenu(fileName = "New Item Data", menuName ="Data/Item")]
public class ItemData : ScriptableObject
{
public string itemName; //아이템의 이름
public Sprite icon; //보여지는 아이템 이미지
}
public class ItemObject : MonoBehaviour
{
private SpriteRenderer spriteRenderer;
[SerializeField] private ItemData itemData;
private void Start()
{
//ItemData의 icon으로 스프라이트 이미지 변경
spriteRenderer = GetComponent<SpriteRenderer>();
spriteRenderer.sprite = itemData.icon;
}
private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.GetComponent<Player>() != null)
{
Debug.Log("Picked up the item : "+ itemData.name);
Destroy(gameObject);
}
}
}