일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- equals
- Unity
- ==
- 스프라이트 아틀라스
- addressable
- ReferenceEquals
- 1인 개발
- 포스트 프로세싱
- design pattern
- UniRx
- 최적화
- ScriptableObject
- Post Processing
- 플러그인
- Strategy Pattern
- Boxing
- Reflection
- 디자인 패턴
- sprite atlas
- c#
- 게임 개발
- Zenject
- Addressable System
- Unboxing
- Abstract Factory Pattern
- Android Plugin
- 인앱 결제
- Today
- Total
One_KWS
ScriptableObject 사용하기 본문
스크립터블 오브젝트(ScriptableObject)는 대량의 데이터를 저장할 수 있는 데이터 컨테이너이다. 스크립터블 오브젝트를 사용하면 값의 사본이 생성되는 것을 방지하여 메모리 사용량을 줄일 수 있다.
ScriptableObject를 이용한 예제 만들기
Monster라는 C# 스크립트를 생성하고 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 Attribute를 추가해준다. 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 창에 작성한 데이터가 출력되는 것을 확인할 수 있다.
'Unity' 카테고리의 다른 글
Zenject (0) | 2023.03.14 |
---|---|
UniRx (0) | 2023.03.14 |
Unity 인앱 결제 (In-App Purchasing) 구현하기 (0) | 2023.03.01 |
Unity 포스트 프로세싱 (Post-Processing) 정리 (0) | 2023.03.01 |
Addressable System #4 (0) | 2023.02.21 |