/// <summary> /// 建立 Scriptable Asset /// </summary> /// <returns>是否成功建立</returns> public bool CreateScriptableAssets(string scriptableScriptName, string scriptableAssetName) { _config = ClientDataBaseManager.Instance.m_config; MonoScript script = AssetDatabase.LoadAssetAtPath <MonoScript>(_config.GetScriptableScriptsPath() + scriptableScriptName); if (script == null || script.GetClass() == null) { Debug.LogError(string.Format("Scriptable Script is Null. [Path:{0}]", _config.GetScriptableScriptsPath() + scriptableScriptName)); return(false); } string path = _config.GetScriptableAssetPath() + scriptableAssetName; UtilityEditor.CreateFolder(_config.GetScriptableAssetPath()); Object _Object = ScriptableObject.CreateInstance(script.GetClass()); AssetDatabase.CreateAsset(_Object, path); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport); Debug.Log(string.Format("[Scriptable Asset] is Create.\nFile:[{0}] Path:[{1}]", scriptableAssetName, _config.GetScriptableAssetPath())); //資料讀取 ScriptableObjectBase scriptableObjectBase = AssetDatabase.LoadAssetAtPath <ScriptableObjectBase>(path); return(scriptableObjectBase.LoadGameTable(true)); }
/// <summary> /// 建立 Scriptable Script /// </summary> /// <returns>是否成功建立</returns> bool CreateScriptableScript(string[] variable, Dictionary <string, TableData> dataMap, int keyCol) { //TODO @jiake 是否考虑做个映射表? string templateName = _tableName; string tableClassName = _config.GetScriptableScriptName(_tableName); string dataClassName = _config.GetTableClassScriptName(_tableName); string tableBaseClassName = string.Empty; bool existKey = (keyCol >= 0); if (!TryParseSequenceTable(_tableName, ref templateName, ref tableBaseClassName, ref dataClassName)) { if (Names.Contains(_tableName)) { templateName = "StringScriptable"; } else if (!ExistTemplate(templateName)) { templateName = (existKey ? "ScriptableWithKey" : "Scriptable"); } } string template = GetTemplate(templateName); if (string.IsNullOrEmpty(template)) { return(false); } template = template.Replace("$ScriptableName", tableClassName); template = template.Replace("$ScriptableBaseName", tableBaseClassName); template = template.Replace("$GameTableName", _tableName); template = template.Replace("$ClassName", dataClassName); template = template.Replace( "$GameTablePath", "Config.GameTablePath + GameTableName + Config.FILE_EXTENSION_TXT"); if (existKey) { string fieldName = variable[keyCol]; TableData tableData = dataMap[fieldName]; template = template.Replace("$KeyTypeName", tableData.type); template = template.Replace("$KeyFieldName", variable[keyCol]); } Dictionary <string, string> variableMap = new Dictionary <string, string>(); for (int i = 0; i < variable.Length; i++) { string fieldName = variable[i]; // 不处理忽略字段 if (!dataMap.ContainsKey(fieldName)) { continue; } TableData tableData = dataMap[fieldName]; if (tableData.type == IgnoreType) { continue; } var resultStr = GetDataClassDetial(i, fieldName, tableData); variableMap.Add(fieldName, resultStr); } StringBuilder sb = new StringBuilder(); foreach (KeyValuePair <string, string> item in variableMap) { sb.Append(item.Value); } template = template.Replace("$DataLoad", sb.ToString()); // 字段验证 StringBuilder checkFieldSb = new StringBuilder(); int checkFieldIndex = 1; foreach (KeyValuePair <string, string> item in variableMap) { checkFieldSb.Append(string.Format("\"{0}\"", item.Key)); if (checkFieldIndex != variableMap.Count) { checkFieldSb.Append(","); } checkFieldIndex++; } template = template.Replace("$FieldCheck", checkFieldSb.ToString()); UtilityEditor.CreateFolder(_config.GetScriptableScriptsPath()); using (var writer = new StreamWriter(_config.GetScriptableScriptsPath() + _config.GetScriptableScriptName(_tableName, true))) { writer.Write(template); writer.Close(); } AssetDatabase.Refresh(); Debug.Log(string.Format("[Scriptable Script] is Create.\nFile:[{0}] Path:[{1}]", _config.GetScriptableScriptName(_tableName, true), _config.GetScriptableScriptsPath())); return(true); }