Esempio n. 1
0
        public static void CreateScript(TemplateSettingStatus status, List <ReplaceInfo> replaces, ProcessDictionary result = null, bool isRefresh = true)
        {
            if (result == null)
            {
                result = new ProcessDictionary();
            }

            if (replaces != null)
            {
                foreach (var replace in replaces)
                {
                    if (string.IsNullOrEmpty(replace.ReplaceWord))
                    {
                        continue;
                    }

                    result[replace.Key] = replace.ReplaceWord;
                }
            }

            ExecuteChain(status, result);

            // 生成ディレクトリが指定されていなければアクティブなパスへ作成
            var createDirectory = status.GetProperty(TemplateSettingStatus.Property.Path).stringValue;
            var createPath      = Path.Combine(
                string.IsNullOrEmpty(createDirectory) == false ? createDirectory : TemplateUtility.GetActiveFolder(),
                status.GetProperty(TemplateSettingStatus.Property.ScriptName).stringValue
                );
            var code = status.GetProperty(TemplateSettingStatus.Property.Code).stringValue;

            var path = Replace(createPath, result);

            TemplateUtility.CreateScript(
                path,
                Replace(code, result),
                (TemplateUtility.OverwriteType)status.GetProperty(TemplateSettingStatus.Property.Overwrite).enumValueIndex
                );

            if (isRefresh)
            {
                AssetDatabase.ImportAsset(path);
                TemplateUtility.RefreshEditor();
            }

            // プレハブ生成登録
            var prefabObject = status.GetProperty(TemplateSettingStatus.Property.DuplicatePrefab).objectReferenceValue as GameObject;
            var targetObject = status.GetProperty(TemplateSettingStatus.Property.AttachTarget).objectReferenceValue as GameObject;

            if (prefabObject != null && targetObject != null)
            {
                TemplatePrefabCreator.AddTempCreatePrefabSetting(status.TargetTemplateSetting, path);
            }
        }
 public static void CreateGroupSetting()
 {
     CreateScriptableObject <TemplateGroupSetting>(TemplateUtility.GetActiveFolder());
 }
Esempio n. 3
0
        private static void DuplicatePrefab(TemplateSetting[] settings)
        {
            if (settings == null || settings.Length == 0)
            {
                Debug.LogWarning("設定ファイルがありません");
                return;
            }

            var components = new List <Component>(settings.Length);

            foreach (var setting in settings)
            {
                // Load Attach Script
                var scriptKye  = string.Format(TempCreateScriptPathKeyFormat, setting.GetInstanceID());
                var scriptPath = SessionState.GetString(scriptKye, null);
                var mono       = AssetDatabase.LoadAssetAtPath <MonoScript>(scriptPath);
                SessionState.EraseString(scriptKye);

                if (mono == null)
                {
                    Debug.LogErrorFormat("{0} : スクリプトファイルがありませんでした", scriptPath);
                    return;
                }

                var scriptType = mono.GetClass();

                if (scriptType == null)
                {
                    Debug.LogErrorFormat("{0} : クラスを取得できませんでした。ファイル名とクラス名が違う可能性があります", mono.name);
                    return;
                }

                components.Add(setting.AttachTarget.AddComponent(scriptType));
            }

            // コピーパスは同じなはずのため、最初のを使用する
            var prefabPath = AssetDatabase.GetAssetPath(settings[0].DuplicatePrefab);
            var createPath = settings[0].PrefabPath;
            var prefabName = settings[0].PrefabName;

            if (string.IsNullOrEmpty(createPath))
            {
                // 空白の場合はアクティブなパスへ生成
                createPath = TemplateUtility.GetActiveFolder();
            }

            if (string.IsNullOrEmpty(prefabName))
            {
                // 空白の場合はコピー元のプレハブ名
                prefabName = Path.GetFileName(prefabPath);
            }

            prefabName += Path.GetExtension(prefabName) == string.Empty ? ".prefab" : string.Empty;
            var createFullPath = AssetDatabase.GenerateUniqueAssetPath(Path.Combine(createPath, prefabName));

            AssetDatabase.CopyAsset(prefabPath, createFullPath);

            foreach (var component in components)
            {
                UnityEngine.Object.DestroyImmediate(component, true);
            }
        }