장비 데이터도 전 주와 같이 엑셀을 통해 텍스트 파일을 만드는 방식을 사용하여 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번 데이터를 넣도록 하였지만 이 부분은 플레이어 스탯을 저장하는 것을 구현하면서 고칠 필요가 있다.
장비 데이터 적용도 일단은 위와 같이 진행하면 구현에는 문제가 없을 것 같다.