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컴포넌트를 붙인 뒤, 데이터 스크립터블 오브젝트와 프리팹을 채워줌