Scriptable Object란?
유니티에서 제공하는 기능으로, 대량의 데이터를 저장하기 위해 사용하는 방식이다.
장점 )
데이터 사본이 여러 개 발생하는 것을 방지한다.
프로젝트의 메모리 사용을 줄인다.
변경되지 않는 데이터를 저장하는 prefab 사용 시 유리하다.
=> 값을 직접 복제하는 것이 아닌, 한 번 메모리에 복제된 사본을 참조하는 방식이기 때문.
특이사항)
Game Object에 컴포넌트로 붙지 않고, 프로젝트 Asset에 바로 저장된다.
작성 예시)
using UnityEngine;
public enum WeaponType
{
Pistol,
Rifle,
Hammer
}
[CreateAssetMenu(fileName = "WeaponItemData_", menuName = "Data/WeaponItemData", order = 1)]
public class WeaponItemData : ScriptableObject
{
[SerializeField]
private float attack;
public float Attack {get {return attack;} }
[SerializeField]
private float attackSpeed;
public float AttackSpeed {get {return attackSpeed;} }
[SerializeField]
private float attackRange;
public float attackRange {get {return attackRange;} }
}
게임 엔지니어링의 3대 요소
1. 모듈형 디자인 사용
- 종속 관계가 있는 시스템을 만들지 말자. (시스템 간 하드 레퍼런스 생성 X)
- 씬을 클린 스테이트로 생성 (임시 데이터가 남지 않도록 하기)
- Prefabs 자체적으로 작동하도록 설정하기. (소스 컨트롤의 용이성, 충돌 감소)
- 각 컴포넌트에 한 가지 문제만 연결하기.
2. 변경과 수정의 용이성
- 게임을 데이터 중심으로 제작하라.
- 디자이너가 시스템을 쉽게 수정할 수 있도록 제작 (각 컴포넌트가 서로 독립적으로 존재하는 것)
- 런타임 시 게임을 변경할 수 있는 자유도가 높을수록 게임의 안정성이 높다.
(Scriptable Object 처럼 런타임 상태를 외부에 다시 저장할 수 있으면 좋다.)
3. 디버깅이 쉬운 제작
- 모듈화 수준이 높을수록 일부만 따로 테스트하기 편하다.
- 게임 수정에 대한 자유도가 높을수록 (각 기능마다 자체 인스펙터 뷰가 있다면) 디버깅이 쉬워진다.


'게임 개발 일지 > 내일배움캠프 TIL' 카테고리의 다른 글
| [디자인 패턴] 싱글턴, 상태패턴, 이벤트버스 (0) | 2024.01.08 |
|---|---|
| 재정의할 적절한 메서드를 찾을 수 없습니다. (1) | 2024.01.05 |
| Item 로직 초안 (0) | 2024.01.04 |
| 오버로딩과 오버라이딩 / 오브젝트 풀링 (1) | 2024.01.02 |
| Delegate / 추상 클래스와 인터페이스 (0) | 2023.12.29 |
댓글