스크립터블 오브젝트

woollim·2024년 10월 25일
1

Unity개념

목록 보기
2/8

■ 스크립터블 오브젝트 (ScriptableObject)

○ 특징과 용도

  • 경량 데이터 저장
    ScriptableObject는 메모리를 효율적으로 사용하여 가벼운 데이터 객체를 생성할 수 있음. 주로 자주 사용되는 값이나 데이터 셋을 저장하는 데 적합

  • 데이터 관리
    스크립터블 오브젝트는 게임에서 반복적으로 사용되는 데이터(예: 아이템 정보, 캐릭터 능력치 등)를 관리하기 좋음.
    이는 메모리와 성능을 효율적으로 사용할 수 있도록 도와줌

  • 데이터 재사용
    여러 오브젝트나 스크립트가 같은 스크립터블 오브젝트를 참조할 수 있어서 데이터를 재사용하거나 쉽게 업데이트할 수 있음

  • 직렬화 가능
    유니티 에디터 내에서 직접 설정하고 저장할 수 있도록 직렬화가 가능하여 인스펙터에 변수들이 노출됨. 인스펙터(Inspector)에서 에셋처럼 관리될 수 있음
    프로젝트 패널에서 별도의 에셋 파일로 생성되어, 수동으로 수정하거나 관리하기가 용이

  • 런타임 데이터 유지
    MonoBehaviour와 달리, 씬이 전환되어도 데이터가 유지되므로 각종 설정 값이나 상태를 유지하는 데 유리함

  • 성능 최적화
    게임 오브젝트에 붙지 않기 때문에, MonoBehaviour와 달리 각 프레임에서 업데이트되지 않음. 이는 성능을 최적화하는 데 도움이 됩니다.

○ 스크립터블 오브젝트 활용

  • 스크립터블 오브젝트를 활용하면 효율적으로 데이터 중심 개발을 할 수 있고, 특히 다양한 값들을 유지하면서 반복적으로 참조해야 할 때 유용함

  • 다양한 데이터 템플릿을 손쉽게 생성하고 사용할 수 있음

  • 아이템 데이터 : 아이템의 이름, 설명, 아이콘 등을 스크립터블 오브젝트에 저장해 다양한 아이템을 손쉽게 관리

  • 캐릭터 설정 : 캐릭터의 능력치, 스킬 등을 관리하는 용도로 사용

  • 레벨 설정 : 게임 레벨에 대한 난이도, 목표, 등장하는 몬스터 정보 등을 스크립터블 오브젝트로 관리

  • [CreateAssetMenu] 속성
    • fileName : 새로 생성되는 스크립터블 오브젝트의 기본 파일 이름을 지정함
    • menuName : 에디터에서 새 스크립터블 오브젝트를 생성할 때 표시될 경로를 지정
    • order : 순서를 나타냄
  • 유니티 에디터에서 사용하는 방법
    1. 유니티 에디터에서 프로젝트 창을 열고, 빈 공간에서 마우스 오른쪽 클릭
    2. Create > Game > ItemData 메뉴를 선택
    3. 새 스크립터블 오브젝트가 생성되며 기본 파일 이름이 NewPlayerStats로 설정됨
    4. 생성된 ItemData 오브젝트를 클릭하여 인스펙터 창에서 itemName, itemID, itemIcon, description 등의 값을 수정할 수 있음

○ 사용 예시

  1. 데이터를 저장하는 ScriptableObject 생성
    • 이 코드를 작성하면 프로젝트 창에서 CharacterData라는 ScriptableObject를 에셋으로 생성할 수 있음
using UnityEngine;

[CreateAssetMenu(fileName = "NewCharacterData", menuName = "CharacterData")]
public class CharacterData : ScriptableObject
{
    public string characterName;
    public int health;
    public int attackPower;
}

  1. ScriptableObject의 데이터 사용
    • Character 스크립트에서 CharacterData를 참조하여 데이터를 가져올 수 있음
public class Character : MonoBehaviour
{
    public CharacterData characterData;

    void Start()
    {
        Debug.Log("캐릭터 이름: " + characterData.characterName);
        Debug.Log("체력: " + characterData.health);
        Debug.Log("공격력: " + characterData.attackPower);
    }
}


■ 예제 - 스크립터블 오브젝트 생성하기

using UnityEngine;

[CreateAssetMenu(fileName = "NewItemData", menuName = "Game/ItemData")]
public class ItemData : ScriptableObject
{
    public string itemName;
    public int itemID;
    public Sprite itemIcon;
    public string description;
}
  • 이 코드를 통해 ItemData라는 스크립터블 오브젝트 클래스를 생성
  • 이를 통해 아이템 정보를 저장할 수 있음
  • CreateAssetMenu 속성을 사용하여 유니티 에디터에서 쉽게 인스턴스를 생성할 수 있음. -> 인스펙터에서 매번 새로 스크립터블 오브젝트를 작성할 필요 없이 메뉴에서 간단히 생성할 수 있음

0개의 댓글