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

One·2022년 1월 11일
1

Unity

목록 보기
3/9
post-thumbnail

스크립터블 오브젝트(ScriptableObject)는 대량의 데이터를 저장할 수 있는 데이터 컨테이너이다. 스크립터블 오브젝트를 사용하면 값의 사본이 생성되는 것을 방지하여 메모리 사용량을 줄일 수 있다.

스크립터블 오브젝트를 이용한 예제 만들기

Monster라는 C# 스크립트를 생성하고 Monobehavior 대신 ScriptableObject를 상속받는다.

public class Monster : ScriptableObject {

}

몬스터 정보를 입력해 줄 변수들을 작성한다.

public enum Race {
    Human,
    Orc,
    Elf
}

public class Monster : ScriptableObject {
    public string name;	
    public int health;
    public int level;
    public int power;
    public Race race;
}

몬스터 정보 에셋을 생성하기 위해 CreateAssetMenu 어트리뷰트를 추가해준다. fileName은 에셋 생성시 기본으로 붙여지는 이름이고, menuName은 에셋 생성 메뉴의 이름, order는 에셋 메뉴의 순서이다.

[CreateAssetMenu(fileName = "New Monster", menuName = "Monster/Create Monster", order = 0)]
public class Monster : ScriptableObject {
	public string name;
  	public int health;
  	public int level;
  	public int power;
  	public Race race;
}

Assets/Create 메뉴에 Monster/Create Monster 메뉴가 생성된 것을 볼 수 있다. Create Monter 메뉴를 클릭하여 Monster 에셋을 생성해준다.

Archer, Magician, Warrior의 세가지 에셋을 생성한 후 각가의 데이터를 입력해준다.

위에서 만든 몬스터 데이터들을 적용시킬 스크립트를 생성한다.

public class MonsterPrefab : MonoBehaviour {
  public Monster monster;
  
  public void PrintMonsterStatus() {
      print(monster.name);
      print(monster.level);
      print(monster.health);
      print(monster.power);
      print(monster.race);
  }
}

Hierachy에 Cube를 하나 생성 후 MonsterPrefab 스크립트를 붙여주고 프리팹으로 만든다. 생성되면 바닥으로 떨어지게 하기 위해 Rigidbody를 붙였다.

몬스터들을 생성하기 위해 MonsterCreator 스크립트를 생성한다.

public class MonsterCreator : MonoBehaviour {
  [SerializeField]
  private List<Monster> mosnters = new List<Monster>();
  [SerializeField]
  private GameObject monsterPrefab;

  public void Start() {
    foreach (var monster in mosnters) {
      var createdMonster = Instantiate(monsterPrefab).GetComponent<MonsterPrefab>();
      createdMonster.gameObject.name = monster.name;
      createdMonster.monster = monster;
      createdMonster.PrintMonsterStatus();
    }
  }
}

GameObject를 하나 생성하여 MonsterCreator 스크립트를 붙여준 후 Monsters에 위에서 만든 몬스터 데이터 에셋들을 넣어준다.

생성된 MonsterPrefab들이 바닥으로 떨어지게 하기위해 Plane을 하나 생성해 준 후 플레이를 누르면 Archer, Magician, Warrior 이름의 큐브들이 생성되고 Console 창에 작성한 데이터가 출력되는 것을 확인할 수 있다.

profile
Unity Developer

0개의 댓글