ScriptableObject는 Unity에서 데이터를 저장하고 관리하는 유연한 데이터 컨테이너이다.
ScriptableObject의 특징을 나열하면
1.MonoBehaviour 보다 경령화 되었고 GameObject에 컴포넌트로 추가 할 수 없다.
2.유니티 CallBack 중에서 OnEnable(),OnDisable(),OnDestroy()만 호출이 가능하다.
3.인스턴스화를 하지 않기 떄문에 사본이 여러개가 생성되지 않아 메모리 할당 최적화에 용이하다.
json,xml,csv 등으로 관리하던 데이터를 Unity에서 쉽게 사용 할 수 있도록 편의적인 기능으로 제공한 것이 ScriptableObject 이다.
그럼 ScriptableObject는 어떡해 사용하는가?
1. ScriptableObject를 어떡해 설정할건지 선언이 필요하다.
Class 기반이기에 똑같이 .cs 로 작성을 해주면된다.
1.CreataAssetMenu 라는 Attribute 를 통해 포멧에 맞춰 작성해주어야 프로젝트 창에서 문제없이 호출하여 생성이 가능해진다.
2.ScriptableObject로 사용할 Class는 ScriptableObject를 상속해줘야 된다.
3.Header라는 Attribute를 통해 Inspector창에 표시될때 항목을 나눠줄 수 있다.
4. ScriptableObject Class 기반이기에 상속이 가능하다 ( RangedAttackSO는 AttackSO를 상속하고있다)
2. ScriptableObject를 .cs로 설정을 다했는데 어떡해 생성해?
제대로 .cs를 작성하였다면 , 프로젝트 창에서 생성시에 위에 이미지처럼 제대로 표시될것이다.
RangedAttackSO를 생성하면 Inspector에서 부모 데이터까지 다 Inspector에서 표시되며 쉽게 데이터 값이 수정 할수있다.
3. ScriptableObject를 생성했으면 어떤식으로 코드에서 사용돼?
캐릭터 스텟에 AttackSO 라는 ScriptableObject를 추가하여 사용하며 필요할때 데이터를 가져와서 호출할 수있다.
이런식으로 해당 객체에게 능력치 데이터를 선언할 수 있게 된다.
투사체를 발사하는 메서드인데 공격에 관련된 데이터를 ScriptableObject에 담아놔서 이렇게 꺼내 쓸수도 있다.
4. 스텟 능력치 말고도 쓸 수 있어?
물론이다.
1.다양한 패턴을 분리하여 ScriptableObject로 만들수도있고
2.FSM 구조같은 형태를 만들어 해당 캐릭 모드를 ScritptableObject로 만들수도 있고
3.미연시 게임의 대화 로직 같은 것도 .csv가아닌 ScritptableObject로도 만들 수있다.
위에 예시 든것 뿐만아니라 생각해서 활용하면 어떡해든 만들어 사용 할 수 있다.
'Unity' 카테고리의 다른 글
Unity :: StringToHash 메서드 사용하기(애니메이터 컨트롤러) (0) | 2024.10.14 |
---|---|
Unity :: 스크립트에서 InputSystem을 사용하기 위해 InputActionAsset을 호출시 주의할 점 (0) | 2024.10.10 |
Unity :: 오일러각 vs 쿼터니언 , 쿼터니언과 벡터 곱셈 (0) | 2024.10.08 |
Unity :: Unity 입력처리, InputManager vs InputSystem (0) | 2024.10.07 |
Unity :: 충돌 처리,OnCollison~() , OnTrigger~()의 인자값 차이 (0) | 2024.10.07 |