본문 바로가기
게임 개발(유니티)/공부사항

유니티 스크립터블 오브젝트

by goraku97 2025. 12. 1.

Scriptable Object

- 간단한 데이터 컨테이너이며, 오브젝트에 붙이지 않고 에셋으로 사용 가능.

- 코드랑 데이터를 깨끗하게 분리할 수 있음.

- 프로젝트 뷰에 있는 에셋이기 때문에 재사용성이 큼.

   (여러 씬에서 동시에 공유하며 사용가능.)

- 인스펙터에서 데이터만 편하게 수정·테스트 가능.

   (디자이너나, 기획자가 코드를 몰라도 쉽게 수정이 가능하여, 협업에 도움이 됨)

- 라이프사이클이 씬에 묶여 있지 않아서 관리가 편함

   ( ScriptableObject는 에셋이라, 씬이 바뀌어도 그대로 유지됨.)

 

 

생성 및 사용방법

1. 새 ScriptableObject 스크립트 만들기

 

  1) 폴더 만들기

   - Assets/2.Scripts/Data 같은 폴더를 하나 만들어두는 걸 추천.

 

  2) C# 스크립트 기본 틀

- MonoBehaviour 대신 ScriptableObject를 상속

- [CreateAssetMenu(...)] 어트리뷰트 를 작성

   ( fileName : 새로 만들 때 기본 파일 이름,  menuName : Create 메뉴에 어떻게 표시할지 경로 )

 

2. ScriptableObject 에셋 실제로 만들기

 

1. Project 창에서 원하는 폴더로 이동

 

2. 폴더 안 빈 공간에서 우클릭

    (예시 : Create -> Game -> Round Data)

 

3. 에셋 생성 완료 

 

3. MonoBehaviour에서 ScriptableObject 사용하기

1) 하이어라키에서, 오브젝트 안에 있는 컴포넌트에  해당 에셋을 할당하기

 

Mono Behaviours 과 Scriptable Object 차이

생명주기의 차이

ScriptableObject는 MonoBehaviour처럼 모든 생명주기 함수를 다 쓰지 않음.

(유니티 알쓸유잡 : 유니티 스크립터블 오브젝트 참고)

 

- Awake, Start, Update 는 ScriptableObject의 생명주기 함수로 동작하지 않음