using UnityEngine; using System.Collections.Generic; using UnityEngine.UI; using Google.Protobuf.WellKnownTypes; using System; 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 TextAsset SelectJsonFile; public TextAsset TaskJsonFile; public TextAsset GlobalJsonFile; public TextAsset SelectsJsonFile; public Dictionary npcDictionary = new Dictionary(); public Dictionary locationDictionary = new Dictionary(); public Dictionary eventDictionary = new Dictionary(); public Dictionary matialDictionary = new Dictionary(); public Dictionary sceneDictionary = new Dictionary(); public Dictionary incidentSiteDictionary = new Dictionary(); public Dictionary NPCDictionary = new Dictionary(); public Dictionary LanguageDictionary = new Dictionary(); public Dictionary SelectDictionary = new Dictionary(); public Dictionary TaskDictionary = new Dictionary(); //小智专用 //读取职业名字 public Dictionary GlobalDictionary = new Dictionary(); public Dictionary ZZSelectsDictionary = new Dictionary(); public Dictionary OpcNameDictionary=new Dictionary(); public Dictionary> ZZFindTaskID = new Dictionary>(); 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); SelectDictionary = SelectJSON(SelectJsonFile.text); TaskDictionary = TaskJSON(TaskJsonFile.text); //小智专用 OpcNameDictionary = SelectOpcName(npcJsonFile.text); GlobalDictionary = GlobelJSON(GlobalJsonFile.text); ZZSelectsDictionary = SelectsJSON(SelectsJsonFile.text); ZZFindTaskID = BoolTask(SelectJsonFile.text); GetLanguageByID(20008); foreach (var npc in sceneDictionary) { Debug.Log(npc.Value.ID); //Debug.Log(npc.Value.Name); } GetNpcDataByID(8001); } // 解析 JSON 字符串为 Task 数据 public Dictionary TaskJSON(string json) { Task_[] npcArray = JsonHelper.FromJson(json); Dictionary selectDictionary = new Dictionary(); foreach (var npc in npcArray) { TaskDictionary[npc.ID] = npc; } return TaskDictionary; } // 解析 JSON 字符串为 Select 数据 public Dictionary SelectJSON(string json) { Select[] npcArray = JsonHelper.FromJson(json); Dictionary locationDictionary = new Dictionary(); foreach (var location in locationArray) { locationDictionary[location.ID] = location; } return locationDictionary; } //小智专用 //读取职业名字 public Dictionary SelectOpcName(string json) { NPCData[] npcArray = JsonHelper.FromJson(json); Dictionary OpcNameDictionary = new Dictionary(); foreach (var npc in npcArray) { OpcNameDictionary[npc.ID]= npc; } return OpcNameDictionary; } //找到玩家接取的任务ID对应的 public Dictionary> BoolTask(string json) { Select[] locationArray = JsonHelper.FromJson(); } // 添加到列表中 locationDictionary[location.Precondition].Add(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 Task_ GetTaskByID(int id) { Task_ info = null; if (TaskDictionary.TryGetValue(id.ToString(), out info)) { return info; } else return null; } public LocationData GetAreaDateById(int id) { LocationData info = null; if (locationDictionary.TryGetValue(id, out info)) { return info; } else return 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; } public NPCData GetRoleDateById(int id) { NPCData info = null; if (npcDictionary.TryGetValue(id, out info)) { return info; } else return null; } //设置UI文本的方法 public string SetUIText(string id) { Language info = null; if (LanguageDictionary.TryGetValue(int.Parse(id), out info)) { return info.Text; } else { Debug.Log($"No Language found with ID: {id}"); return null; } } /// /// 判断指挥官选择了哪一个选项(展示废除) /// /// a=1选择了第一个,a=2,a=3 /// ID不出情况一般固定90016 /// public string GetGlobal(int a,int id) { GlobalJson temp=null ; switch(a) { case 1: if (GlobalDictionary.TryGetValue(id, out temp)) return temp.VectorInt1; else return null; case 2: if (GlobalDictionary.TryGetValue(id, out temp)) return temp.VectorInt2; else return null; case 3: if (GlobalDictionary.TryGetValue(id, out temp)) return temp.VectorInt3; else return null; default: return "颠仔没有这种东西"; } //GlobalJson info = null; //if (GlobalDictionary.TryGetValue(id,out info)) //{ // return info.Int1.ToString(); //} //else //{ // Debug.Log($"No Language found with ID: {id}"); // return null; //} } public string GetEvacuate(string id) { Select info = null; if (ZZSelectsDictionary.TryGetValue(id.ToString(), out info)) { return info.Note; } else { Debug.Log($"No Select found with ID: {id}"); return null; } } /// /// 读取职业名字 /// /// 职业ID去Role表获取 /// public string GetOcpName(int id) { NPCData info = null; if (OpcNameDictionary.TryGetValue(id, out info)) { return info.Note; } else { Debug.Log($"No Select found with ID: {id}"); return null; } } public string GetOcpID(int id) { Task_ info = null; if (TaskDictionary.TryGetValue(id.ToString(), out info)) { return info.Role; } else { Debug.Log($"No Select found with ID: {id}"); return null; } } public string GetNPCdian(string id) { Select info = null; if (ZZSelectsDictionary.TryGetValue(id.ToString(), out info)) { return info.Route; } else { Debug.Log($"No Select found with ID: {id}"); return null; } } } // 帮助类,用于解析 JSON 数组 public static class JsonHelper { public static T[] FromJson(string json) { json = "{\"items\":" + json + "}"; Wrapper wrapper = JsonUtility.FromJson>(json); return wrapper.items; } [System.Serializable] private class Wrapper { 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 Range; public string NpcRatio; public string PlayerSpawnPoint; public string LabelPos; public string ShowRadius; public string Oversee; public string EndPoint; public string RoleLimit; public string 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 string Name; public int Type; public string IncidentType; public string ObjList; public string AreaList; public int Storeroom; public string TriageArea; public string ConfigText; } [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; public string Role; public string GeneralRole; } [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; } [Serializable] public class Select { public string ID; public string Note; public string PlayScript; public string Group; public string UnDisplay; public string ShowText; public string Icon; public string Precondition; public string Exclusive; public string TakeTime; public string TimeLimit; public string NextSelect; public string TaskLink; public string TaskLinkDetails; public string CallMode; public string CallRecipient; public string CorrectOption; public string Reward; public string Result; public string Route; public string TimingChange; public string AppliedUI; public string UIDetails; public string Seq; } [System.Serializable] public class Task_ { public string ID; public string Note; public string Name; public string Type; public string PlayScript; public string Trigger; public string TriggerLogic; public string OverseeCond; public string TimeLimit; public string Role; public string Selects; public string TargetType; public string Targets1; public string Targets2; public string Targets2Logic; public string ExtraValue; public string Sort; public string IsShow; public string Exclusive; public string Reward; } [System.Serializable] public class GlobalJson { public int ID; public string Note; public int Scene; public int PlayScript; public int Int1; public int Int2; public int Int3; public float Float1; public float Float2; public float Float3; public string VectorInt1; public string VectorInt2; public string VectorInt3; public string VectorInt4; public string VectorInt5; public string String1; public string String2; public string String3; }