본문 바로가기
게임 개발 일지/내일배움캠프 TIL

[Unity 공식 문서 공부] Scriptable Object

by 빛하_ 2024. 1. 4.

 

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. 디버깅이 쉬운 제작

- 모듈화 수준이 높을수록 일부만 따로 테스트하기 편하다.

- 게임 수정에 대한 자유도가 높을수록 (각 기능마다 자체 인스펙터 뷰가 있다면) 디버깅이 쉬워진다.

 

 

 

 

 

 

댓글