공부일지

Json 연습하기 본문

UnityProjects/Item

Json 연습하기

이하택 2023. 11. 3. 08:51

궁금한 점

  • 아이템에 대한 json 파일을 작성하려는데
    • 아이템 탐색
      • 동일한 카테고리의 아이템이 아니라면 변수차이로 오류나지 않을까?
        • 클래스의 상속이 떠오르기도 하고
        • 그럼 json파일을 분리해서 여러개로 쓰고 싶은데
        • json파일을 카테고리별로 구분해서 별도 파일로 만들지 않는다면 아이템을 어떤 기준으로 구분할 수 있을까?
          • 파싱해서?
          • 아니면 아래처럼 id를 카테고리화해서
      • id로 가져와야하는거 아님?
        • ㅇㅇ아마
        • 근데 그러면 id를 카테고리화해서 장비인지, 어떤 부위인지 알아내는게 맞지 않나?


분석.?

  • atk 일부러 빠뜨렸을 때 반응

  • 존재하지 않는 def라는 변수를 삽입했을 때
  • def는 디폴트도 안뜨고 정상 작동

소결론

위와 같이 있는 데이터를 빠뜨리면 오류, 없는 데이터를 변수로 받으려하면 🐶무시.

그렇다면

json을 아이템이라는 이름으로 전부 묶어내고

각각의 필드를 차이를 주며,

스크립트에서 가져오려 할 때 변수를 적절히 사용해준다면?

{
	"items": [
			{
				"id" : 10001,
				"name" : "BF_Sword",
				"atk" : 10
			},
			{
				"id" : 10011,
				"name" : "ChainVest",
				"def" : 3
			}
	]
}

미련 남는데 아래처럼 작성될 수는 없는거임?

{
  "item":[
    {
      "category": "equipment",
      "detail": [
          {
              "id": 10001,
              "name": "BF_Sword",
              "atk": 10,
							"def": 0,
          },
          {
              "id": 10011,
              "name": "chainVest",
              "atk": 0,
							"def": 5
          }
      ]
    },
    {
      "category": "medicine",
      "detail": [
          {
              "id": 10101,
              "name": "potion",
              "heal": 10
          },
          {
              "id": 10101,
              "name": "poison",
              "heal": -10
          }
      ]
    }
  ]
}
public enum EquipPart
{
    Helmet,
    Armor,
    Shoes,
    Gloves,
    Weapon
}
[System.Serializable]
public class EquipInfo
{
    public uint id;
    public string name;
    public int atk;
    public int def;
}
[System.Serializable]
public class EquipData
{
    public EquipInfo[] equipment;
}
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using static EquipData;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;
    private void Awake()
    {
        if(Instance == null)
            Instance = this;
    }
    void Start()
    {
        TextAsset textAsset = Resources.Load<TextAsset>("Json/ItemDataBase");
        EquipData equipArray = JsonUtility.FromJson<EquipData>(textAsset.text);
        foreach (EquipInfo equip in equipArray.equipment)
        {
            Debug.Log(equip.id);
            Debug.Log(equip.name);
            Debug.Log(equip.atk);
            Debug.Log(equip.def);
            Debug.Log("=============");
        }
    }
}
  • 다른 아이템과 간섭하여 오류 만들지 않고 정상 작동함
    • 는줄 알았네…..

{
  "equip": [
    {
      "id": 10001,
      "name": "BF_Sword",
      "atk": 10,
      "def": 0
    },
    {
      "id": 10011,
      "name": "chainVest",
      "atk": 0,
      "def": 5
    }
  ],
  "medicine": [
    {
      "id": 10101,
      "name": "potion",
      "heal": 10
    },
    {
      "id": 10101,
      "name": "poison",
      "heal": -10
    }
  ]
}
  • 아이템에 대한 데이터를 json으로 작성하려는데
    • itemjson에서 추가, 제거 등 유지 보수를 하려면 카테고리를 나누어야 할 것 같은데
      • 위의 예시에서 특정 category를 가져올 수 있는 방법?
        • 아니면 모든 아이템들을 일렬로 나열?
          • 하면 다른 카테고리 애들과 오류를 어캐 컨트롤함?

  • 오류 케이스 1 - 단일 최상위 항목
{

  "equip": [
    {
      "id": 10001,
      "name": "BF_Sword",
      "atk": 10,
      "def": 0
    },
    {
      "id": 10011,
      "name": "chainVest",
      "atk": 0,
      "def": 5
    }
  ],
}
{
  "medicine": [
    {
      "id": 10101,
      "name": "potion",
      "heal": 10
    },
    {
      "id": 10101,
      "name": "poison",
      "heal": -10
    }
  ]


}


정리해보자

얼추 데이터 어캐 짤지는 알려주셨고

데이터 구조가 잡혔으니

상속~어쩌고는

내가 캐싱할 때 변수어쩌고해서 처리하면 ㅇ

배열 만들어지면 게임매니전지 어딘지 아무튼 배열을 여기다가 캐싱해두고

필요할때 id로 탐색하면 되겠지?

id규칙

그 전에

id를 string으로 주네

10000시작

ㅇ, 아이템이면 0, 카테고리, 소분류, 항목

MyClass foundElement = myArray.FirstOrDefault(element => element.MyField == targetValue);


Uploaded by N2T

'UnityProjects > Item' 카테고리의 다른 글

아이템 기획  (1) 2023.11.07
[Unity]Json을 이용한 직렬화 - 작성중  (0) 2023.10.31