示例#1
0
        private ManageInfoView CreateManageInfoView(ManageInfo manageInfo, AssetCollectInfo[] collectInfos, bool opened, bool edited)
        {
            var manageAssetPath = AssetDatabase.GetAssetPath(manageInfo.assetObject);
            var ignoreType      = assetManageManager.GetIgnoreType(manageAssetPath);
            var assetInfos      = collectInfos
                                  .Where(x => x.AssetInfo != null)
                                  .Where(x => x.ManageInfo == manageInfo)
                                  .ToArray();

            var view = new ManageInfoView(manageInfo, assetInfos, ignoreType, opened, edited);

            view.OnUpdateManageInfoAsObservable()
            .Subscribe(_ =>
            {
                assetManageManager.UpdateManageInfo(view.ManageInfo);
                UpdateAssetInfo(view.Infos.Select(x => x.AssetPath).ToArray());
                BuildManageInfoViews();
            })
            .AddTo(Disposable);

            view.OnDeleteManageInfoAsObservable()
            .Subscribe(_ =>
            {
                assetManageManager.DeleteManageInfo(selectionGroupInfo.groupName, view.ManageInfo);
                UpdateAssetInfo(view.Infos.Select(x => x.AssetPath).ToArray());
                BuildManageInfoViews();
            })
            .AddTo(Disposable);

            return(view);
        }
示例#2
0
        public ManageInfo AddManageInfo(string groupName, Object manageAsset)
        {
            if (manageAsset == null)
            {
                return(null);
            }

            var manageAssetPath = AssetDatabase.GetAssetPath(manageAsset);

            var ignore = GetIgnoreType(manageAssetPath);

            var manageInfo = new ManageInfo(manageAsset)
            {
                isAssetBundle = ignore != IgnoreType.IgnoreAssetBundle,
            };

            manageInfos.Add(manageInfo);

            var groupInfo = groupInfos.FirstOrDefault(x => x.groupName == groupName);

            if (!groupInfo.manageTargetAssets.Contains(manageInfo.assetObject))
            {
                groupInfo.manageTargetAssets.Add(manageInfo.assetObject);
            }

            SaveConfigAsset();

            manageInfoSearchCache = null;

            return(manageInfo);
        }
示例#3
0
        public AssetInfo GetAssetInfo(string assetPath, ManageInfo managedInfo = null)
        {
            assetPath = PathUtility.ConvertPathSeparator(assetPath);

            if (IsIgnoreManageAsset(assetPath))
            {
                return(null);
            }

            if (managedInfo == null)
            {
                managedInfo = GetAssetManagedInfo(assetPath);
            }

            if (managedInfo == null)
            {
                return(null);
            }

            var resourcePath = GetAssetLoadPath(assetPath);

            var assetInfo = new AssetInfo(resourcePath, managedInfo.category, managedInfo.tag);

            var assetBundleName = GetAssetBundleName(assetPath, managedInfo);

            if (!string.IsNullOrEmpty(assetBundleName))
            {
                var assetBundleInfo = new AssetBundleInfo(assetBundleName);

                assetInfo.SetAssetBundleInfo(assetBundleInfo);
            }

            return(assetInfo);
        }
示例#4
0
        public ManageInfo AddManageInfo(string category, Object manageTarget)
        {
            if (manageTarget == null)
            {
                return(null);
            }

            var assetPath = AssetDatabase.GetAssetPath(manageTarget);

            var assetGuid  = AssetDatabase.AssetPathToGUID(assetPath);
            var ignoreType = GetIgnoreType(assetPath);

            var manageInfo = new ManageInfo()
            {
                guid          = assetGuid,
                category      = category,
                isAssetBundle = ignoreType != IgnoreType.IgnoreAssetBundle,
            };

            managedInfos.Add(assetGuid, manageInfo);

            Save();

            return(manageInfo);
        }
示例#5
0
 public ManageInfo(ManageInfo source)
 {
     this.assetObject         = source.assetObject;
     this.isAssetBundle       = source.isAssetBundle;
     this.assetBundleNameType = source.assetBundleNameType;
     this.assetBundleNameStr  = source.assetBundleNameStr;
     this.comment             = source.comment;
 }
示例#6
0
        private void DrawManageInfoGUI(ManageInfo manageInfo)
        {
            if (manageInfo == null)
            {
                return;
            }

            var guid = manageInfo.guid;

            Object asset;

            if (!assetCacheByGuid.ContainsKey(guid))
            {
                asset = UnityEditorUtility.FindMainAsset(guid);

                assetCacheByGuid[guid] = asset;
            }
            else
            {
                asset = assetCacheByGuid.GetValueOrDefault(guid);
            }

            var assetPath = AssetDatabase.GUIDToAssetPath(guid);

            EditorLayoutTools.ContentTitle(assetPath, new Color(0.2f, 1f, 0f, 1f));

            using (new ContentsScope())
            {
                using (new DisableScope(true))
                {
                    EditorGUILayout.ObjectField("Asset", asset, typeof(Object), false);

                    EditorGUILayout.TextField("Category", manageInfo.category);

                    if (!string.IsNullOrEmpty(manageInfo.tag))
                    {
                        EditorGUILayout.TextField("Tag", manageInfo.tag);
                    }

                    if (!string.IsNullOrEmpty(manageInfo.comment))
                    {
                        EditorGUILayout.TextField("Comment", manageInfo.comment);
                    }

                    if (manageInfo.isAssetBundle)
                    {
                        EditorGUILayout.EnumPopup("NamingRule", manageInfo.assetBundleNamingRule);

                        if (!string.IsNullOrEmpty(manageInfo.assetBundleNameStr))
                        {
                            EditorGUILayout.TextField("NameStr", manageInfo.assetBundleNameStr);
                        }
                    }
                }
            }

            EditorGUILayout.Space(3f);
        }
        //----- method -----

        public AssetCollectInfo(AssetManageManager assetManageManager, string assetPath, AssetInfo assetInfo, ManageInfo manageInfo, IgnoreType?ignoreType)
        {
            this.assetManageManager = assetManageManager;

            AssetPath  = assetPath;
            AssetInfo  = assetInfo;
            ManageInfo = manageInfo;
            Ignore     = ignoreType;
        }
示例#8
0
        public void DeleteManageInfo(ManageInfo manageInfo)
        {
            if (manageInfo == null)
            {
                return;
            }

            managedInfos.Remove(manageInfo.guid);

            Save();
        }
示例#9
0
        public string[] GetManageAssetPaths(ManageInfo manageInfo)
        {
            var assetPath = AssetDatabase.GUIDToAssetPath(manageInfo.guid);

            if (!AssetDatabase.IsValidFolder(assetPath))
            {
                return(new string[] { assetPath });
            }

            var assetPaths = UnityEditorUtility.GetAllAssetPathInFolder(assetPath);

            return(assetPaths.Where(x => !IsIgnoreManageAsset(x)).ToArray());
        }
示例#10
0
        public void UpdateManageInfo(ManageInfo manageInfo)
        {
            var count = manageInfos.RemoveAll(x => x.assetObject == manageInfo.assetObject);

            if (0 < count)
            {
                manageInfos.Add(new ManageInfo(manageInfo));

                SaveConfigAsset();

                manageInfoSearchCache = null;
            }
        }
示例#11
0
        private string GetAssetGroupName(ManageInfo manageInfo)
        {
            if (manageInfo == null)
            {
                return(null);
            }

            var asset = manageInfo.assetObject;

            var groupInfo = groupInfos.FirstOrDefault(x => x.manageTargetAssets.Contains(asset));

            return(groupInfo != null ? groupInfo.groupName : null);
        }
示例#12
0
        //----- method -----

        public ManageInfoView(ManageInfo manageInfo, AssetCollectInfo[] assetInfos, IgnoreType?ignoreType, bool open, bool edit)
        {
            this.ignoreType = ignoreType;
            this.assetInfos = assetInfos;

            // 確定するまで元のインスタンスに影響を与えないようにコピーに対して編集を行う.
            this.manageInfo = new ManageInfo(manageInfo);

            IsOpen = open;
            IsEdit = edit;

            manageAssetPath = AssetDatabase.GetAssetPath(manageInfo.assetObject);

            contentsScrollView = new ContentsScrollView();

            SetScrollViewContents();
        }
示例#13
0
        public void DeleteManageInfo(string groupName, ManageInfo manageInfo)
        {
            if (manageInfo == null)
            {
                return;
            }

            manageInfos.RemoveAll(x => x.assetObject == manageInfo.assetObject);

            var groupInfo = groupInfos.FirstOrDefault(x => x.groupName == groupName);

            if (groupInfo.manageTargetAssets.Contains(manageInfo.assetObject))
            {
                groupInfo.manageTargetAssets.Remove(manageInfo.assetObject);
            }

            SaveConfigAsset();

            manageInfoSearchCache = null;
        }
示例#14
0
        //----- method -----

        public ManageInfoView(AssetManagement assetManagement, ManageInfo manageInfo, string externalResourcesPath, string shareResourcesPath, IgnoreType?ignoreType, bool open, bool edit)
        {
            this.ignoreType = ignoreType;

            var externalResourcesDir = externalResourcesPath + PathUtility.PathSeparator;
            var shareResourcesDir    = shareResourcesPath + PathUtility.PathSeparator;

            // 確定するまで元のインスタンスに影響を与えないようにコピーに対して編集を行う.
            ManageInfo = manageInfo.DeepCopy();

            IsOpen = open;
            IsEdit = edit;

            manageAssetPath = AssetDatabase.GUIDToAssetPath(manageInfo.guid);
            manageAsset     = AssetDatabase.LoadMainAssetAtPath(manageAssetPath);

            displayManageAssetPath = string.Empty;

            if (manageAssetPath.StartsWith(externalResourcesDir))
            {
                isShareAsset           = false;
                displayManageAssetPath = manageAssetPath.Substring(externalResourcesDir.Length, manageAssetPath.Length - externalResourcesDir.Length);
            }
            else if (manageAssetPath.StartsWith(shareResourcesDir))
            {
                isShareAsset           = true;
                displayManageAssetPath = manageAssetPath.Substring(shareResourcesDir.Length, manageAssetPath.Length - shareResourcesDir.Length);
            }

            contentsScrollView = new ContentsScrollView();

            contentsScrollView.OnRequestDetailViewAsObservable()
            .Subscribe(x => SetDetailView(x))
            .AddTo(Disposable);

            contentAssetsScrollView = new ContentAssetsScrollView(externalResourcesPath, shareResourcesPath);

            BuildContentsInfo(assetManagement);
        }
示例#15
0
        //----- method -----

        public ManageInfoView(ManageInfo manageInfo, AssetCollectInfo[] assetInfos, IgnoreType?ignoreType, bool open, bool edit)
        {
            this.ignoreType = ignoreType;
            this.assetInfos = assetInfos;

            // 確定するまで元のインスタンスに影響を与えないようにコピーに対して編集を行う.
            this.manageInfo = new ManageInfo(manageInfo);

            IsOpen = open;
            IsEdit = edit;

            manageAssetPath = AssetDatabase.GetAssetPath(manageInfo.assetObject);

            contentsScrollView = new ContentsScrollView();

            contentsScrollView.OnRequestDetailViewAsObservable()
            .Subscribe(x => SetDetailView(x))
            .AddTo(Disposable);

            contentAssetsScrollView = new ContentAssetsScrollView();

            BuildContentsInfo();
        }
示例#16
0
        private ManageInfoView CreateManageInfoView(ManageInfo manageInfo, bool opened, bool edited)
        {
            var manageAssetPath = AssetDatabase.GUIDToAssetPath(manageInfo.guid);
            var ignoreType      = assetManagement.GetIgnoreType(manageAssetPath);

            var view = new ManageInfoView(assetManagement, manageInfo, externalResourcesPath, shareResourcesPath, ignoreType, opened, edited);

            view.OnUpdateManageInfoAsObservable()
            .DelayFrame(1)
            .Subscribe(_ =>
            {
                assetManagement.UpdateManageInfo(view.ManageInfo);

                var updateAssetPaths = assetManagement.GetManageAssetPaths(view.ManageInfo);

                UpdateAssetInfo(updateAssetPaths);

                BuildManageInfoViews();
            })
            .AddTo(Disposable);

            view.OnDeleteManageInfoAsObservable()
            .DelayFrame(1)
            .Subscribe(_ =>
            {
                var updateAssetPaths = assetManagement.GetManageAssetPaths(view.ManageInfo);

                assetManagement.DeleteManageInfo(view.ManageInfo);

                UpdateAssetInfo(updateAssetPaths);

                BuildManageInfoViews();
            })
            .AddTo(Disposable);

            return(view);
        }
示例#17
0
        private void SaveConfigAsset()
        {
            // 後から除外設定などを書き換えた時の為に初期化時に更新を行う.
            foreach (var item in manageInfos)
            {
                if (item == null)
                {
                    continue;
                }

                if (item.assetObject == null)
                {
                    continue;
                }

                var assetPath = AssetDatabase.GetAssetPath(item.assetObject);

                var manageInfo = GetManageInfo(assetPath);
                var ignoreType = GetIgnoreType(assetPath);

                if (manageInfo == null)
                {
                    manageInfo = new ManageInfo(item.assetObject);
                }

                manageInfo.isAssetBundle = !ignoreType.HasValue || ignoreType != IgnoreType.IgnoreAssetBundle;
            }

            Reflection.SetPrivateField(config, "groupInfos", groupInfos);
            Reflection.SetPrivateField(config, "manageInfos", manageInfos);

            // 最適化.
            config.Optimisation();

            // 保存.
            UnityEditorUtility.SaveAsset(config);
        }
示例#18
0
        private string GetAssetBundleName(string assetPath, ManageInfo manageInfo)
        {
            //-------------------------------------------------------------------------------------
            // ※ nullを返すと再インポート時に無限ループになるので未設定の場合はstring.Emptyを返す.
            //-------------------------------------------------------------------------------------

            var assetBundleName = string.Empty;

            if (manageInfo == null)
            {
                return(string.Empty);
            }

            if (manageInfo.assetObject == null)
            {
                return(string.Empty);
            }

            if (!manageInfo.isAssetBundle)
            {
                return(string.Empty);
            }

            // グループ名設定.
            var assetGroupName = GetAssetGroupName(manageInfo);

            if (!string.IsNullOrEmpty(assetGroupName))
            {
                assetBundleName = assetGroupName + PathUtility.PathSeparator;
            }

            // 管理アセットの親フォルダパス.
            var managePath           = AssetDatabase.GetAssetPath(manageInfo.assetObject);
            var parentDir            = PathUtility.ConvertPathSeparator(Directory.GetParent(managePath).ToString() + PathUtility.PathSeparator);
            var externalResourcesDir = externalResourcesPath + PathUtility.PathSeparator;
            var folder = parentDir.Substring(externalResourcesDir.Length);

            assetBundleName += folder.Replace(PathUtility.PathSeparator.ToString(), AssetNameSeparator);

            switch (manageInfo.assetBundleNameType)
            {
            case ManageInfo.NameType.ManageAssetName:
                assetBundleName += Path.GetFileNameWithoutExtension(managePath);
                break;

            case ManageInfo.NameType.ChildAssetName:
            case ManageInfo.NameType.PrefixAndChildAssetName:
            {
                assetBundleName += Path.GetFileNameWithoutExtension(managePath) + AssetNameSeparator;

                if (AssetDatabase.IsValidFolder(managePath))
                {
                    folder += Path.GetFileNameWithoutExtension(managePath) + AssetNameSeparator;
                }

                var resourcePath = assetPath.Substring((externalResourcesDir + folder).Length);

                switch (manageInfo.assetBundleNameType)
                {
                case ManageInfo.NameType.ChildAssetName:
                    assetBundleName += Path.GetFileNameWithoutExtension(resourcePath);
                    break;

                case ManageInfo.NameType.PrefixAndChildAssetName:
                    assetBundleName += manageInfo.assetBundleNameStr + AssetNameSeparator + Path.GetFileNameWithoutExtension(resourcePath);
                    break;
                }
            }
            break;

            case ManageInfo.NameType.Specified:
            {
                assetBundleName += Path.GetFileNameWithoutExtension(managePath) + AssetNameSeparator;

                assetBundleName += manageInfo.assetBundleNameStr;
            }
            break;
            }

            if (string.IsNullOrEmpty(assetBundleName))
            {
                return(string.Empty);
            }

            // アセットバンドル名は小文字しか設定出来ないので小文字に変換.
            return(assetBundleName.ToLower());
        }
示例#19
0
        private string GetAssetBundleName(string assetPath, ManageInfo manageInfo)
        {
            //-------------------------------------------------------------------------------------
            // ※ nullを返すと再インポート時に無限ループになるので未設定の場合はstring.Emptyを返す.
            //-------------------------------------------------------------------------------------

            var assetBundleName = string.Empty;

            if (manageInfo == null)
            {
                return(string.Empty);
            }

            if (string.IsNullOrEmpty(manageInfo.guid))
            {
                return(string.Empty);
            }

            if (!manageInfo.isAssetBundle)
            {
                return(string.Empty);
            }

            // カテゴリ名設定.
            var category = manageInfo.category;

            if (!string.IsNullOrEmpty(category))
            {
                assetBundleName += category + PathUtility.PathSeparator;
            }

            // 管理アセットの親フォルダパス.
            var managePath = AssetDatabase.GUIDToAssetPath(manageInfo.guid);

            var parentDir = PathUtility.ConvertPathSeparator(Directory.GetParent(managePath).ToString() + PathUtility.PathSeparator);

            var resourcesDir = string.Empty;

            if (assetPath.StartsWith(externalResourcesPath))
            {
                resourcesDir = externalResourcesPath + PathUtility.PathSeparator;
            }
            else if (assetPath.StartsWith(shareResourcesPath))
            {
                resourcesDir = shareResourcesPath + PathUtility.PathSeparator;
            }

            var folder = parentDir.Substring(resourcesDir.Length);

            assetBundleName += folder.Replace(PathUtility.PathSeparator.ToString(), AssetNameSeparator);

            switch (manageInfo.assetBundleNamingRule)
            {
            case AssetBundleNamingRule.ManageAssetName:
                assetBundleName += Path.GetFileNameWithoutExtension(managePath);
                break;

            case AssetBundleNamingRule.ChildAssetName:
            case AssetBundleNamingRule.PrefixAndChildAssetName:
            {
                assetBundleName += Path.GetFileNameWithoutExtension(managePath) + AssetNameSeparator;

                if (AssetDatabase.IsValidFolder(managePath))
                {
                    folder += Path.GetFileNameWithoutExtension(managePath) + AssetNameSeparator;
                }

                var resourcePath = assetPath.Substring((resourcesDir + folder).Length);

                var targetName = resourcePath.Split(PathUtility.PathSeparator).FirstOrDefault(x => !string.IsNullOrEmpty(x));

                switch (manageInfo.assetBundleNamingRule)
                {
                case AssetBundleNamingRule.ChildAssetName:
                    assetBundleName += Path.GetFileNameWithoutExtension(targetName);
                    break;

                case AssetBundleNamingRule.PrefixAndChildAssetName:
                    assetBundleName += manageInfo.assetBundleNameStr + AssetNameSeparator + Path.GetFileNameWithoutExtension(targetName);
                    break;
                }
            }
            break;

            case AssetBundleNamingRule.Specified:
            {
                assetBundleName += Path.GetFileNameWithoutExtension(managePath) + AssetNameSeparator;

                assetBundleName += manageInfo.assetBundleNameStr;
            }
            break;
            }

            if (string.IsNullOrEmpty(assetBundleName))
            {
                return(string.Empty);
            }

            // アセットバンドル名は小文字しか設定出来ないので小文字に変換.
            return(assetBundleName.ToLower());
        }
示例#20
0
        public void UpdateManageInfo(ManageInfo manageInfo)
        {
            managedInfos[manageInfo.guid] = manageInfo;

            Save();
        }