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

김찬수·2023년 5월 16일
0

Unity

목록 보기
10/15
  • 메모리 사용량을 줄이기 위해서 나온 기술
  • 여러 데이터를 중복되지 않게 관리하기 위한 데이터 컨테이너
using UnityEngine;

[CreateAssetMenu(fileName = "Data", menuName = "ScriptableObjects/SpawnManagerScriptableObject", order = 1)]
public class SpawnManagerScriptableObject : ScriptableObject
{
    public string prefabName;

    public int numberOfPrefabsToCreate;
    public Vector3[] spawnPoints;
}
  • 위의 코드를 스크립트에 작성해주고 유니티 위쪽 탭의 Assets > Create에 생성된 SpawnManagerScriptableObject를 클릭해 생성해서 사용 가능

  • 스크립트에 코드를 작성해주면, Assets > Create 에 Scriptable Object가 추가된 것을 확인할 수 있음

  • 생성된 스크립터블 오브젝트를 선택해보면 캐릭터 데이터에 대한 프로퍼티들을 볼 수 있음

  • 각 스크립터블 오브젝트에 데이터를 입력해줌
[SerializeField]
    private CharacterData characterData;
    public CharacterData CharacterData { set { characterData = value; } }

    public void WatchCharacterInfo()
    {
        Debug.Log("캐릭터 이름 :: " + characterData.CharacterName);
        Debug.Log("캐릭터 체력 :: " + characterData.Hp);
        Debug.Log("캐릭터 공격력 :: " + characterData.Damage);
        Debug.Log("캐릭터 이동속도 :: " + characterData.MoveSpeed);
    }
  • 캐릭터 데이터를 사용할 캐릭터 클래스를 작성
  • 캐릭터 클래스를 사용할 프리팹을 만들어줌
public enum CharacterType
{
    Normal, Power, Speed, Tanker, Support
}

public class CharacterSpawner : MonoBehaviour
{
    [SerializeField]
    private List<CharacterData> characterDatas;
    [SerializeField]
    private GameObject characterPrefab;

    void Start()
    {
        for (int i = 0; i < characterDatas.Count; i++)
        {
            var character = SpawnCharacter((CharacterType)i);
            character.WatchCharacterInfo();
        }
    }

    public Character SpawnCharacter(CharacterType type)
    {
        var newCharacter = Instantiate(characterPrefab).GetComponent<Character>();
        newCharacter.CharacterData = characterDatas[(int)type];
        return newCharacter;
    }
}
  • 캐릭터를 소환하는 CharacterSpawner를 만들고 Start함수에 테스트용 코드를 작성

  • 게임 오브젝트를 만들고 CharacterSpawner컴포넌트를 붙인 뒤, 데이터 스크립터블 오브젝트와 프리팹을 채워줌

  • 플레이 버튼을 눌러서 실행하면 캐릭터 게임 오브젝트의 클론이 생성되고, 콘솔 창에는 각 캐릭터의 정보가 출력됨
profile
프로그래머 지망생

0개의 댓글