본문 바로가기

개발자_뉴비일지

내일배움캠프 Unity 54일차 TIL - START LastTeamProject

string keyword="START LastTeamProject";

1. Last Team Project

사실 최종 프로젝트를 시작한날은 저번주였지만..그동안 TIL을 못써서 많이 밀렸었다ㅜㅠ

오픈월드 RPG를 만들기로 했고 기획회의를 거치며 틀을 잡아갔다.

나는 일반 몬스터 부분을 맡았다.

 

(1) 몬스터데이터관리

엑셀에서 Json파일로 변환된 이 데이터들을 정리해야한다.

 

<DataManager>

[Serializable]
public class MonsterInfo
{
    public string name;
    public int level;
    public float exp;
    public bool AtkStance;
    public float HP;
    public float Damage;
    public float Daf;
    public float DmgSpeed;
    public float CriDamage;
    public float Speed;
    public float AtkSpeed;
    public float Range;
}

>>Json상의 변수 이름과 동일하게 적어 넣은 클래스 생성.

 

[Serializable]
public class MonsterDataBase //->실제데이터
{
    public List<MonsterInfo> FieldMonster;
    public Dictionary<string, MonsterInfo> fieldMonDic = new();

    //몬스터리스트를 딕셔너리에 추가
    public void Initialize()
    {
        foreach (MonsterInfo fieldMonster in FieldMonster)
        {
            fieldMonDic.Add(fieldMonster.name, fieldMonster);
        }
    }

    //이름으로 몬스터정보 반환
    public MonsterInfo GetMonsterInfoByKey(string name)
    {
        if (fieldMonDic.ContainsKey(name))
        {
            return fieldMonDic[name];
        }
        return null;
    }
}

>>데이터들을 리스트와 딕셔너리로 변환하여 가지고 있는다.

 

public class DataManager : MonoBehaviour
{
    public static DataManager Instance;

    public MonsterDataBase monsterDatabase;

    private void Awake()
    {
        if (Instance == null)
        {
            Instance = this;
        }
        DontDestroyOnLoad(this.gameObject);

        TextAsset fieldMonData = Resources.Load<TextAsset>("Json/FieldMonster_Data");
        monsterDatabase = JsonUtility.FromJson<MonsterDataBase>(fieldMonData.text);
        monsterDatabase.Initialize();
    }

>>DataManager가 Json파일을 불러오고 데이터들을  알 수 있게 처리

 

<MonsterManager>

 public DataManager dataManager;

 // Start is called before the first frame update
 void Start()
 {
     dataManager = DataManager.Instance;
 }

 // Update is called once per frame
 void Update()
 {

 }

 public MonsterInfo GetMonsterInfoByKey(string name)
 {
     return dataManager.monsterDatabase.GetMonsterInfoByKey(name);
 }

>>DataManager에서 몬스터 정보를 가져오는 함수를 리턴하는 메소드를 만들어준다.

 

<FieldMonster>

[field: Header("Reference")]
[field: SerializeField] public MonsterInfo myInfo;

public MonsterManager monsterManager;
public string monsterName;// to do 나자신의 이름 가져오게 하기

 private void Start()
 {
     myInfo = monsterManager.GetMonsterInfoByKey(monsterName);
 }

>>FieldMonster가 MonsterManager에 자기자신의 정보만 요청하게 만들어 준다.

 

>>유니티에서 PlatypusA라는 MonsterName을 입력하면 정보를 가져오는것을 볼 수 있다.

 

 

마무리

데이터매니저, 몬스터매니저, 몬스터 스크립트간의 관계를 따져가며 필요한 정보를 획득할수 있게 하는데

이해가 잘 안되서 시간이 너무 많이 걸렸다ㅠㅠ

MonsterName부분을 직접 입력하지 않고 알아서 입력해주는 코드도 짜봐야겠다.

 

.

.

.

with 우산속 용이