public SOBase GetConfig(string url) { if (_configs.ContainsKey(url) == false) { //TextAsset asset = ResourcesManager.Instance.LoadAsset("Config/"+url) as TextAsset; TextAsset asset = Resources.Load <TextAsset>("Config/" + url); using (var sr = new StringReader(asset.text)) { var names = ReadLine(sr); var configData = ScriptableObject.CreateInstance <ConfigData>(); configData.fieldNames = names; int column = names.Length; var types = ReadLine(sr); configData.fieldTypes = new int[column]; configData.typeIndexs = new int[column]; configData.InitData(types[0]); int intlen = 0; int stringlen = 0; int boollen = 0; int floatlen = 0; for (int i = 0; i < column; i++) { string type = types[i].ToLower(); SetIndex(type, configData.typeIndexs, i, ref intlen, ref stringlen, ref boollen, ref floatlen); switch (type) { case "int": configData.fieldTypes[i] = ConfigDataType.INT; break; case "string": configData.fieldTypes[i] = ConfigDataType.STRING; break; case "bool": configData.fieldTypes[i] = ConfigDataType.BOOL; break; case "float": configData.fieldTypes[i] = ConfigDataType.FLOAT; break; case "enum": configData.fieldTypes[i] = ConfigDataType.ENUM; break; case "array": configData.fieldTypes[i] = ConfigDataType.ARRAY; break; case "custom": configData.fieldTypes[i] = ConfigDataType.CUSTOM; break; } } configData.InitLine(intlen, stringlen, boollen, floatlen); ReadLine(sr); string[] arr = null; int lineCount = 3; while ((arr = ReadLine(sr)) != null) { lineCount++; var lineObj = new ConfigSheetLine(); lineObj.InitLine(intlen, stringlen, boollen, floatlen); for (int i = 0; i < column; i++) { try { lineObj.SetData(arr[i], configData.fieldTypes[i], configData.typeIndexs[i]); } catch (FormatException e) { throw new FormatException(url + " 数据格式转换错误:第" + lineCount + "行,第" + (i + 1) + "列\r\n" + e.StackTrace); } } bool b = configData.Add(lineObj); if (b == false) { throw new Exception("重复的ID项:第" + lineCount + "行" + ";" + url); } } _configs[url] = configData; } } return(_configs[url]); }