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); }
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); }
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); }
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); }
public ManageInfo(ManageInfo source) { this.assetObject = source.assetObject; this.isAssetBundle = source.isAssetBundle; this.assetBundleNameType = source.assetBundleNameType; this.assetBundleNameStr = source.assetBundleNameStr; this.comment = source.comment; }
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; }
public void DeleteManageInfo(ManageInfo manageInfo) { if (manageInfo == null) { return; } managedInfos.Remove(manageInfo.guid); Save(); }
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()); }
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; } }
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); }
//----- 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(); }
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; }
//----- 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); }
//----- 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(); }
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); }
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); }
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()); }
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()); }
public void UpdateManageInfo(ManageInfo manageInfo) { managedInfos[manageInfo.guid] = manageInfo; Save(); }