HOW TO UNITY | ScriptableObject 소개
unity 유니티 공부 2025. 12. 6. 17:25 |https://www.youtube.com/watch?v=UBt1Icebh1g
데이터 뱅크 역할도 하면서
이벤트 채널 역할도 가능한
유니티 엔진에서 두루두루 유용한 ScriptableObject
+

데이터 담는 상자
조립가능한 레고
외부파일
각기 다른 씬에서 불러들일 수 있음
씬이 바뀌어도 유지됨
싱글톤 매니저 대체 가능
게임 내 씨샵 스크립트에서 분리 하기 때문에
모듈 조립성이 좋다
여러가지를 바꿔 끼워서 하니까
테스트 하기에 용이함
플레이 모드 나가도
설정값이 남아 있음
save during play 모드 때문임
시네머신 카메도
포스트 프로세싱도
플레이 모드 꺼도 남아있음

시네마신도 포스트 프로세싱도
스크립터블 오브젝트의 속성들을 물려 받는다

크리에이트 창에
ScriptableObject 생성 가능
MonoBehaviour 와 다른 거임

스크립터블 오브젝트 안엔
int , string 등 여러가지를 설정할 수 있음


동일 데이터를 동시에 존재하게 하지 말고
하나의 스크립터블 데이터를 공유 시킴

rpg 게임에선
각 유닛당 공통 소켓
베이스 스탯
유닛 이름
설명
이런 것들이 스크립터블 오브젝트임
현재 체력,
트랜스폼 위치
이런건 개별적으로 달라야 하기 때문에
스크립터블 오브젝트에 넣지 않음

스크립터블 오브젝트의 생명주기 (라이프 사이클) 은 단순함
Start () 가 없음
FixedUpdate () 가 없다는 뜻임
그런 생명함수들은 다 모노비헤비어에 있음

스크립터블 오브젝트 는 어셋이고
폴더 저장된 곳에 저장됨

그래서 그대로 쓸 순 없고
하나의 과정을 거쳐야 함
모노 비헤비어에서 참조해서 쓰는 형태로 만들어야 함

런타임 변경할 필요가 없는 거에 유용
실시간 안 바뀌어도 되는 곳에 적용
npc 이름, npc 속성, npc 의 대화 이런거
스크립터블 오브젝트 = xml = json
다 비슷한 말임
플레이하며 값 바로 조정 가능
json, xml 은 공용 포맷이다
다른데서도 사용가능한 포맷이다
텍스트 편집기로 열어보기 할 때 쓸 수도 있다
유저 모드 에 사용
스크립터블 오브젝트는 유니티 전용이라
외부에서 못 열어봄
xml , json 으로 추출하는 건
협업할 때 쓰임
+
스크립터블 오브젝트에서 함수 만들땐
스태틱 함수처럼 써야 함
인스턴스가 아니기 때문임
무슨말이냐면,
씬 속 개별 개체가 아니다
여러 곳에서 공유하는 공유데이터다
상태가 맘대로 바뀌지 않는다
ScriptableObject 를 상속 받은 것들은
보통 명명할 때 이름 끝에 _SO 를 붙인다

확장 가능한 열거형
인벤토리 아이템 장착
특정 캐릭터가 특정 아이템 소지
유니크 템의 고유 속성
불 물 땅 번개 같은 엘리멘탈 속성
+

델리게이트,
스트레이트지 패턴
함수 전달 가능,
여러 함수 담을 수 있다는 뜻
함수 갈아끼우기 가능 이라는 뜻

ScriptableObject 를 이용하면
npc 행동패턴 ai 를 만들기 좋다
패트롤 정찰 상태냐
도망 상태냐
+

ScriptableObject
옵저버 패턴과도 연관 있다
싱글톤 패턴(게임매니)을 피하는 전략이 있다
스크립터블 오브젝트 자체를 이벤트 핸들러로 사용해서
심글톤을 피하는 거다
싱글톤은 디버깅도 힘들고 꼬이기 쉬우니
최소한으로 사용하라

중간 이벤트 전달자 (이벤트 채널) 로 ScriptableObject 사용가능
서로 더 느슨한 관계로 만듦

그 대표 예시는
버튼의 온 클릭
+

몬스터 도감 목록 시스템의 예시
플레이어가 몬스터 목록 찾기 를 할 때 사용
SO 를 중간에 껴서 이용하면
서로간 의존성 없어도 가능해짐
만약 SO 를 안 썼다면
스크립트간 서로간 연결을 시켰어야 함
의존성 끊는게 유지보수에 더 좋음
generic 도 쓴다 함
제네릭(Generic)
타입을 나중에 지정할 수 있는 클래스, 함수, 자료구조
List<T> 라고 부름
SO 안 쓰고
Unity에서 C# 클래스를 써야 하는 경우
인스펙터에서 편집할 필요 없는 데이터
생성 후 바로 쓰고 사라지는 오브젝트
(런타임 동적 생성)
상속 구조
복잡한 구조
단순 계산
임시 데이터
