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# 클래스를 써야 하는 경우

인스펙터에서 편집할 필요 없는 데이터

생성 후 바로 쓰고 사라지는 오브젝트
(런타임 동적 생성)

상속 구조

복잡한 구조

단순 계산

임시 데이터

 

 

 

반응형
Posted by 이름이 익명
: