본문 바로가기
Study

Unity, ScriptableObject 사용 예제

by Client. DJ 2022. 2. 2.
반응형

각 캐릭터마다 다른 스텟을 적용이 필요한 시점

ScriptableObject란?

유니티에서 제공하는 기능으로, 하나의 데이터 폼을 만들 때 사용합니다. 주로 특정 스테이터스, 레벨 디자인 등에서 사용되고 있습니다.

예제

ScriptableObject_Example.unitypackage
0.58MB

아래와 같이 하나의 폼을 작성합니다.

using UnityEngine;

[CreateAssetMenu(fileName = "CharacterBaseStatsData", menuName = "ScriptableObjects/CharacterBaseStatsData", order = 1)]
public class CharacterBaseStatsData : ScriptableObject
{
    public int Hp;
    public int Defence;
    public int Damage;
    public int AttackSpeed;
    public int MoveSpeed;
}

[CreateAssetMenu(fileName = "CharacterBaseStatsData", menuName = "ScriptableObjects/CharacterBaseStatsData", order = 1)] 어트리뷰트를 통해, ScriptableObject 파일 생성 시 만들어지는 기본 이름메뉴 네이밍을 확인할 수 있습니다. (order는 메뉴 우선 순위)

 

캐릭터 기본 베이스 스텟이라는 데이터 구조를 작성했습니다. 구성은 체력, 방어력, 공격력, 공격속도, 이동속도로 구성하였습니다.

어트리뷰트에서 선언된 위치에 메뉴가 생성되었다.

위와 같이 ScriptableObject를 생성합니다. 그리고 아래와 같이 각각 직업별로 기본 스텟값을 설정합니다.

전사, 마법사, 도적 각각 초기 기본베이스 스텟 설정

using UnityEngine;

public abstract class CharacterInfo :MonoBehaviour
{
    #region Inspector

    public CharacterBaseStatusData baseStausData;

    #endregion
}

CharacterInfo 클래스를 상속받은 각 캐릭터 스테이터스에 연결해줍니다.

각 직업별로 다르게 처리

사용하기 좋은 방법

데이터 구조를 한 덩어리를 만들어서 관리를 하는데 용이합니다. 이 외에도 레벨 디자인에서도 주로 사용이 되며, 실제 게임 작업 중에서는 데이터 하나로 여러가지 표현 방식이 필요한 경우에도 사용합니다.

 

참고 : 유니티 ScriptableObject https://docs.unity3d.com/kr/2021.1/Manual/class-ScriptableObject.html

 

반응형

댓글