Scriptable Object로 아이템 생성

Jihyun·2023년 12월 18일
0

Unity 2D

목록 보기
7/10

Scritable Object

Scritable Object : 클래스 인스턴스와는 별도로 대량의 데이터를 저장하는데 사용할 수 있는 데이터 컨테이너
Unity에서 데이터를 저장하고 조직화하기 위한 스크립팅 클래스
주로 게임에서 리소스, 설정, 상태 등의 데이터를 저장하는 데 사용

변경되지 않는 데이터를 저장하는 MonoBehaviour 스크립트와 연결된 프리팹이 있는 프로젝트의 경우에 유용한데, 데이터를 일반 변수로 구현할 경우 인스턴스화 할 때마다 프리팹에 이 데이터에 대한 자체 사본이 생성된다.
Scriptable Object를 사용하여 메모리에 Scriptable Object의 데이터 사본만을 저장하며 이를 참조하는 방식으로 작동한다

게임 오브젝트에 Scriptable Object를 바로 연결할 수 없으며 프로젝트의 에셋으로 저장해야 한다.

  • Scriptable Object의 인스턴스
  1. 씬과 독립적으로 에디터에서 생성되는 인스턴스
    특정 씬에 종속되지 않고 여러 씬에서 공유될 수 있다
    (씬 간의 데이터를 공유하거나 프로젝트 전반에 일관된 데이터를 사용할 때 편리)

  2. 런타임 중 에셋으로부터 데이터를 로드하거나 리소스 설정 등을 수정하고 업데이트 할 수 있다

Scriptable Object를 사용하여 아이템 생성

  1. ScritableObject를 상속 받는 스크립트 작성
    ScriptableObject의 상속을 받는 클래스는 에디터에서 생성되는 ScriptableObject의 템플릿으로 사용된다
//유니티에 메뉴 추가
//fimeName은 ScriptObject의 기본 파일 이름
//menuName은 오브젝트를 생성할 수 있는 메뉴의 경로 설정
[CreateAssetMenu(fileName = "New Item Data", menuName ="Data/Item")]
public class ItemData : ScriptableObject
{
    public string itemName; //아이템의 이름
    public Sprite icon; //보여지는 아이템 이미지
   
}

  1. 데이터를 받아 생성할 아이템 오브젝트에 대한 스크립트 작성
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);

        }

    }

}
  1. ItemObject 스크립트를 가진 아이템 오브젝트 생성

profile
잊어버려도 다시 리마인드 할 수 있도록 공부한 것을 기록합니다

0개의 댓글