예제 #1
0
        /// <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));
        }
예제 #2
0
        /// <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);
        }