Pink Transparent Star

Unity

[ 내일배움캠프 ] TIL.19 - 스크립터블오브젝트(Scriptable Object)?

채유나 2024. 5. 10. 22:10
728x90

! 아직 추가 작업 중

 

ScriptableObject 정의

클래스의 인스턴스와는 별개로 대량의 데이터를 저장하는데 사용할 수 있는 데이터 컨테이너

프로젝트를 빌드하기 전에만 수정 및 정의가 가능하지만 빌드된 후에는 수정할 수 없다.

 

사용 방법

🔷 ScriptableObject를 만들기 위해선 ScriptabelObject 클래스를 상속받아서 아래와 같이 구현하면 된다.

[CreateAssetMenu(fileName = "Assets/Resources/Player/PlayerData", menuName = "Person/Person", order = 0)]
public class PersonInforSO : ScriptableObject
{
    public Sprite sprite;
    public GameObject AniPrefab;

    public float speed = 0f;
}

 

CreateAssetMenu의 경우 특정 스크립트에서 새로운 에셋을 생성할 수 있는 메뉴 옵션을 제공해주는 기능이다.

🔸 fileName : 생성되는 에셋의 이름 결정

🔸 menuName : 에셋을 생성하는 메뉴의 이름, '/'를 추가하면 경로가 추가

🔸 order : 메뉴 중 몇 번째로 위치할지 표기하는 것으로 값이 클 수록 마지막에 표기

 

🔷 작성한 ScriptableObject를 확인하기 위해선 Create 상단에 나타난 것을 확인할 수 있다.

 

🔷Create > 작성한 ScriptableObject 선택

아래와 같이 생성이 되며 정보에 대한 프로퍼티들이 보이는 것을 확인할 수 있다.

 

 

장점

🔸  값의 사본이 생성되는 것을 방지하여 메모리 사용량을 줄일 수 있다.

🔸  prefab을 일반 변수로 사용할 경우 변수의 byte * 객체 수 만큼 메모리가 소모되지만 ScriptableObject을 이용할 경우 변수의 byte만큼만 소모하여 이득을 챙길 수 있다.

 

단점

🔸 MonoBehaviour와 달리 게임 오브젝트의 컴포넌트에 부착할 수 없다.

 

마지막

ScriptableObject의 경우 외부 데이터에서 파싱하는 경우가 아닌 에디터에서 편하게 관리가 편한 데이터일 경우에만 사용하는게 좋다는 것을 알게되었다. 뭔가 활용성이 좋은 방향이 있을 것같은데 어떤 부분에서 좋은 지 좀 더 알아보고 적용하는게 좋을 것 같다.

 

 

참고사이트

 

|

스크립터블 오브젝트로 코드를 설계하면 코드를 유연하고 간편하며 디버깅에 용이한 상태로 유지할 수 있습니다.

unity.com

 

 

Unity - ScriptableObject(스크립터블 오브젝트)

참조 사이트 - 베르의 게임 개발 유튜브 Han님의 블로그 스크립터블 오브젝트란? 유니티내에서 제공하는 데이터 저장소이다. 스크립터블 오브젝트를 사용하면 값의 사본이 생성되는 것을 방지하

velog.io

 

728x90