CSV 테스트를 위해 적당히 데이터 만듬
1. 만든 CSV는 Resources 폴더(폴더 만들어야 함)에 넣는다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//몬스터의 데이터를 저장하는 구조체
public class MonsterData
{
public int index;
public string name;
public float moveSpeed;
public float rotationSpeed;
public string description;
public MonsterData(int index, string name, float moveSpeed, float rotationSpeed, string description)
{
this.index = index;
this.name = name;
this.moveSpeed = moveSpeed;
this.rotationSpeed = rotationSpeed;
this.description = description;
}
}
public class DataManager : MonoBehaviour
{
//데이터를 넣을 컨테이너를 먼저 만듬
static GameObject container;
//get => container 는 외부에서 get 하면 container 값을 대신 준다는 뜻
static GameObject Container { get => container; }
static DataManager instance;
public static DataManager Instance
{
get
{
if (instance == null)
{
container = new GameObject();
container.name = "DataManager";
instance = container.AddComponent(typeof(DataManager))as DataManager;
instance.SetMonsterDataFromCSV();
DontDestroyOnLoad(container);
}
return instance;
}
}
public string GameDataFileName = ".json";
[Header("몬스터 DB")]
[SerializeField] TextAsset monsterDB;
//구조체로 하나의 메모리로 통합시킴(MonsterData는 구조체)
public Dictionary<int, MonsterData> MonsterDataDict { get; set; }
private void SetMonsterDataFromCSV()
{
//리소스 폴더에 있는 SCV를 불러옴
monsterDB = Resources.Load<TextAsset>("SCV/GameData - Monster");
if (monsterDB ==null)
{
Debug.LogError("SCV/GameData - Monster 파일이 없음");
return;
}
//MonsterDataDict에 저장 공간을 만들어줌
if (MonsterDataDict == null)
{
MonsterDataDict = new Dictionary<int, MonsterData>();
}
//스트링 단위로 쪼갬
string[] lines = monsterDB.text.Substring(0, monsterDB.text.Length).Split('\n');
//0은 필요없는 데이터라 넘어감(설명)
for (int i = 1; i < lines.Length; i++)
{
string[] row = lines[i].Split(',');
//데이터 수 만큼 넣음 Parse으로 스트링 값을 바꿈
MonsterDataDict.Add(int.Parse(row[0]), new MonsterData(
int.Parse(row[0]), // index
row[1], // name
float.Parse(row[2]), // moveSpeed
float.Parse(row[3]), // retationSpeed
row[4] // description
));
}
}
//index 번호의 몬스터를 부르는 함수로 불러서 사용
public MonsterData GetMonsterData(int index)
{
Debug.Log($"몬스터 정보 호출 index : {index}");
//ContainsKey는 해당 키를 가진 주소를 확인한다.
if ( MonsterDataDict.ContainsKey(index))
{
}
Debug.Log("해당 index의 데이터가 없습니다.");
return null;
}
}
Parse = 스트링 값을 다른 값으로 바꾼다.
ex : int.Parse("String") = String 값이 int 값이 됨
이런 식으로 값을 불러와서 사용한다.
'코딩 > 유니티' 카테고리의 다른 글
[Photon] 멀티 플레이어 (0) | 2022.09.13 |
---|---|
[Photon] 서버의 종류 (0) | 2022.09.13 |
[유니티] 오디오 재생 (0) | 2022.08.21 |
유니티 유용한 코드 (0) | 2022.08.10 |
[유니티] 유니티 기본(화면 전환, 기본 조작, 스크립트, 로그) (0) | 2022.07.07 |