_xiaofang/xiaofang/Assets/Script/JSONReader/JSONReader.cs

383 lines
10 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
using System.Collections.Generic;
using UnityEngine.UI;
public class JSONReader : MonoBehaviour
{
// 让 Unity 编辑器能够分别拖入两个不同的 JSON 文件
public TextAsset npcJsonFile; // 用来加载 NPC 数据
public TextAsset locationJsonFile; // 用来加载 Location 数据
public TextAsset eventJsonFile;
public TextAsset matialJsonFile;
public TextAsset sceneJsonFile;
public TextAsset incidentSiteJosnFile;
public TextAsset NPCJosnFile;
public TextAsset LanguageJsonFile;
public Dictionary<int, NPCData> npcDictionary = new Dictionary<int, NPCData>();
public Dictionary<int, LocationData> locationDictionary = new Dictionary<int, LocationData>();
public Dictionary<int, EventData> eventDictionary = new Dictionary<int, EventData>();
public Dictionary<int, MatialData> matialDictionary = new Dictionary<int, MatialData>();
public Dictionary<int, SceneData> sceneDictionary = new Dictionary<int, SceneData>();
public Dictionary<int, IncidentSite> incidentSiteDictionary = new Dictionary<int, IncidentSite>();
public Dictionary<int, NPC> NPCDictionary = new Dictionary<int, NPC>();
public Dictionary<int, Language> LanguageDictionary = new Dictionary<int, Language>();
void Awake()
{
// 解析 NPC 和 Location 数据
npcDictionary = ParseJSON(npcJsonFile.text);
locationDictionary = LocationParseJSON(locationJsonFile.text);
eventDictionary = EventParseJSON(eventJsonFile.text);
matialDictionary = MatialParseJSON(matialJsonFile.text);
sceneDictionary = SceneParseJSON(sceneJsonFile.text);
incidentSiteDictionary = IncidentSiteParseJSON(incidentSiteJosnFile.text);
NPCDictionary = NPCParseJSON(incidentSiteJosnFile.text);
LanguageDictionary = LanguageParseJSON(LanguageJsonFile.text);
GetLanguageByID(20008);
foreach (var npc in sceneDictionary)
{
// Debug.Log(npc.Value.ID);
//Debug.Log(npc.Value.Name);
}
GetNpcDataByID(8001);
}
// 解析 JSON 字符串为 NPC 数据
public Dictionary<int, NPCData> ParseJSON(string json)
{
NPCData[] npcArray = JsonHelper.FromJson<NPCData>(json);
Dictionary<int, NPCData> npcDictionary = new Dictionary<int, NPCData>();
foreach (var npc in npcArray)
{
npcDictionary[npc.ID] = npc;
}
return npcDictionary;
}
// 解析 JSON 字符串为 Location 数据
public Dictionary<int, LocationData> LocationParseJSON(string json)
{
LocationData[] locationArray = JsonHelper.FromJson<LocationData>(json);
Dictionary<int, LocationData> locationDictionary = new Dictionary<int, LocationData>();
foreach (var location in locationArray)
{
locationDictionary[location.ID] = location;
}
return locationDictionary;
}
// 解析 JSON 字符串为 Event 数据
public Dictionary<int, EventData> EventParseJSON(string json)
{
EventData[] locationArray = JsonHelper.FromJson<EventData>(json);
Dictionary<int, EventData> locationDictionary = new Dictionary<int, EventData>();
foreach (var location in locationArray)
{
locationDictionary[location.ID] = location;
}
return locationDictionary;
}
public Dictionary<int, MatialData> MatialParseJSON(string json)
{
MatialData[] locationArray = JsonHelper.FromJson<MatialData>(json);
Dictionary<int, MatialData> locationDictionary = new Dictionary<int, MatialData>();
foreach (var location in locationArray)
{
locationDictionary[location.ID] = location;
}
return locationDictionary;
}
public Dictionary<int, SceneData> SceneParseJSON(string json)
{
SceneData[] locationArray = JsonHelper.FromJson<SceneData>(json);
Dictionary<int, SceneData> locationDictionary = new Dictionary<int, SceneData>();
foreach (var location in locationArray)
{
locationDictionary[location.ID] = location;
}
return locationDictionary;
}
public Dictionary<int, IncidentSite> IncidentSiteParseJSON(string json)
{
IncidentSite[] locationArray = JsonHelper.FromJson<IncidentSite>(json);
Dictionary<int, IncidentSite> locationDictionary = new Dictionary<int, IncidentSite>();
foreach (var location in locationArray)
{
locationDictionary[location.ID] = location;
}
return locationDictionary;
}
public Dictionary<int, NPC> NPCParseJSON(string json)
{
NPC[] locationArray = JsonHelper.FromJson<NPC>(json);
Dictionary<int, NPC> locationDictionary = new Dictionary<int, NPC>();
foreach (var location in locationArray)
{
locationDictionary[location.ID] = location;
}
return locationDictionary;
}
public Dictionary<int, Language> LanguageParseJSON(string json)
{
Language[] locationArray = JsonHelper.FromJson<Language>(json);
Dictionary<int, Language> locationDictionary = new Dictionary<int, Language>();
foreach (var location in locationArray)
{
locationDictionary[location.ID] = location;
}
return locationDictionary;
}
//将所有的数据都拿出来方便调用
// 根据给定的ID获取对应的NPC数据并返回字典中所有数据
public void GetNpcDataByID(int id)
{
// 例如,获取 NPC 字典中对应 ID 的数据
if (npcDictionary.ContainsKey(id))
{
NPCData npcData = npcDictionary[id];
// 遍历并输出字典中的所有数据
foreach (var npc in npcDictionary)
{
}
}
else
{
Debug.Log($"No NPC found with ID: {id}");
}
}
//根据id获取数据
public Language GetLanguageByID(int id)
{
Language info = null;
if (LanguageDictionary.TryGetValue(id, out info))
{
// 判断 Note 是否等于 "预定演练"
if (info.Note == "预订演练")
{
Debug.Log($"Found Language: ID = {info.ID}, Text = {info.Text}, Note = {info.Note}");
return info; // 返回符合条件的 Language 数据
}
else
{
Debug.Log($"Language with ID {id} found, but Note is not '预定演练'.");
}
}
else
{
Debug.Log($"No Language found with ID: {id}");
}
return null; // 如果没有找到符合条件的语言数据,返回 null
}
//获取任务
public Language GetTaskByID(int id,Dictionary<int,Language> dic)
{
Language info = null;
if (LanguageDictionary.TryGetValue(id, out info))
{
// 判断 Note 是否等于 "预定演练"
if (info.Note == "任务")
{
Debug.Log($"Found Language: ID = {info.ID}, Text = {info.Text}, Note = {info.Note}");
//dic.Add(id, info);
return info; // 返回符合条件的 Language 数据
}
else
{
Debug.Log($"Language with ID {id} found, but Note is not '预定演练'.");
}
}
else
{
Debug.Log($"No Language found with ID: {id}");
}
return null; // 如果没有找到符合条件的语言数据,返回 null
}
public SceneData GetSceneById(int id)
{
SceneData info = null;
if (sceneDictionary.TryGetValue(id, out info))
{
return info;
}
else return null;
}
public EventData GetEvenById(int id)
{
EventData info = null;
if (eventDictionary.TryGetValue(id, out info))
{
return info;
}
else return null;
}
public IncidentSite GetIncidentSiteById(int id)
{
IncidentSite info = null;
if (incidentSiteDictionary.TryGetValue(id, out info))
{
return info;
}
else return null;
}
//设置UI文本的方法
public void SetUIText(Text text, int id)
{
Language languageinfo = GetLanguageByID(id);
text.text = languageinfo.Text;
}
}
// 帮助类,用于解析 JSON 数组
public static class JsonHelper
{
public static T[] FromJson<T>(string json)
{
json = "{\"items\":" + json + "}";
Wrapper<T> wrapper = JsonUtility.FromJson<Wrapper<T>>(json);
return wrapper.items;
}
[System.Serializable]
private class Wrapper<T>
{
public T[] items;
}
}
[System.Serializable]
public class NPCData
{
public int ID;
public string Note;
public string Name;
public int ActionMode;
public int Group;
public int GroupLeader;
public int IsLeadingNPC;
public string ICON;
public int WeightLimit;
public string Stats;
public string Skills;
public string ResPath;
}
[System.Serializable]
public class LocationData
{
public int ID;
public string Note;
public int Name;
public int Scene;
public string NpcRatio;
public string Oversee;
public string RoleLimit;
public int Level;
}
[System.Serializable]
public class EventData
{
public int ID;
public string Note;
public int Name;
public string Role;
public string DisasterLocation;
}
[System.Serializable]
public class MatialData
{
public int ID;
public string Note;
public int Type;
public int Name;
public int Weight;
public int Scene;
public string RoleLimit;
public string Icon;
public string ResPath;
public int ConsumableType;
public int Durations;
public string Attribute;
public string IsPickup;
public int PutInStore;
}
[System.Serializable]
public class SceneData
{
public int ID;
public int Name;
public int Type;
public string IncidentType;
public string ObjList;
public string AreaList;
public int Storeroom;
}
[System.Serializable]
public class IncidentSite
{
public int ID;
public string Note;
public int Name;
public int Scene;
public string Position;
public int Volume;
public string Difficulty;
public string SpecialEvent;
}
[System.Serializable]
public class NPC
{
public int ID;
public string Note;
public string Name;
public string PlayScript;
public string ResPath;
public string State1;
public string StateRes1;
public string State2;
public string StateRes2;
public string Stats1;
public string Stats2;
}
[System.Serializable]
public class Language
{
public int ID;
public string Text;
public string Note;
}