장비 데이터도 전 주와 같이 엑셀을 통해 텍스트 파일을 만드는 방식을 사용하여 JSON파일로 만들어보았다. 여기까진 별 문제 없었다.

그런데 이제 그 JSON파일을 어떤 식으로 써먹을 지가 문제였다. 일단 데이터를 뽑아와서 사용하는 것 까지는 문제없이 성공했다.

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Stat:MonoBehaviour
{ 
    [SerializeField]
    private Monster mMonster;

    void Apply()
    {
        try
        {
            for (int i = 0; i < MonsterStat.Monsters_d.Count; i++)
            {
                if (gameObject.name == MonsterStat.Monsters_d[i].Name)
                {
                    mMonster = MonsterStat.Monsters_d[i];
                    tag = mMonster.Type;
                }
            }

            Debug.Log(mMonster.Name);
        }
        catch(Exception e)
        {
            Debug.Log("Error");
        }
    }
    
}

위의 코드는 테스트 겸 짠 코드이다. MonsterStat은 전 주에 작성했던 그 파일로 저 스크립트에서 데이터를 저장하고 불러오기 때문에 여러 번 불러올 필요가 없도록 저 스크립트에서 데이터를 뽑아오는 방식을 채택하였다.

문제는 이걸 어떻게 여러 종류의 몬스터에 각각에 맞는 데이터를 넘겨주느냐였다. JSON파일을 만들 때 ID나 NAME을 통해서 서로 고유의 무언가를 가지게 해서 구분할 수 있도록 하긴 했지만 몬스터 안에 ID나 NAME을 미리 넣어주어야 검색을 통해 데이터를 넘겨줄 수 있었다.

더 나은 방법이 있겠지만 일단 생각나는 대로 코드를 짜보았다.]

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class vMonsterStat : MonoBehaviour
{ 
    [HideInInspector]
    public Monster mMonster;
    [SerializeField]
    public static string HP, ATK, Type_A, Type_D;

    void Start()
    {
        try
        {
            for (int i = 0; i < MonsterStat.Monsters_d.Count; i++)
            {
                if (gameObject.GetComponent<Animator>().avatar.name != null && MonsterStat.Monsters_d[i].Name == gameObject.GetComponent<Animator>().avatar.name)
                {
                    mMonster = MonsterStat.Monsters_d[i];
                    break;
                }
                else
                {
                    mMonster = MonsterStat.Monsters_d[0];
                }
            }
        }
        catch (Exception e)
        {
            Debug.Log("Error");
        }

        HP = mMonster.HP;
        ATK = mMonster.ATK;
        Type_A = mMonster.Type_A;
        Type_D = mMonster.Type_D;
    }
}

몬스터마다 고유의 애니매이터가 존재하고 그 안의 아바타 이름을 NAME으로 사용하기로 하였다. 일단 몬스터 종류만 같으면 스탯은 같다는 설정이므로 어렵지 않게 적용할 수 있었다.

문제는 이 vMonsterStat을 참조하여 데이터를 가져가는 스크립트가 vMeleeManager라는 녀석인데, 이 녀석이 몬스터 뿐만 아니라, 플레이어에도 적용되는 스크립트라서 플레이어 데이터를 몬스터 데이터에 같이 넣어주지 않으면 오류가 발생할 것이라는 것이다. 현재는 임시방편으로 그냥 0번 데이터를 넣도록 하였지만 이 부분은 플레이어 스탯을 저장하는 것을 구현하면서 고칠 필요가 있다.

장비 데이터 적용도 일단은 위와 같이 진행하면 구현에는 문제가 없을 것 같다.