public void OnEnable(UnityEngine.Rect rSubPos, EditorWindow rEditorWindow) { mABEntryConfig = EditorAssists.ReceiveAsset <ABEntryConfig>(ABBuilder.ABEntryConfigPath); mEntryDatas = this.ToEntryDatas(mABEntryConfig); mRefreshTexture = EditorGUIUtility.FindTexture("Refresh"); mOpenFilePath = Application.dataPath + "/Game/GameAsset"; }
static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) { var rAllAssets = new List <string>(importedAssets); rAllAssets.AddRange(deletedAssets); rAllAssets.AddRange(movedAssets); int nCount = 0; for (int i = 0; i < rAllAssets.Count; i++) { if (!rAllAssets[i].Contains("Assets/Game/GameAsset")) { continue; } nCount++; } if (nCount == 0) { return; } var rABEntryConfig = EditorAssists.ReceiveAsset <ABEntryConfig>(ABBuilder.ABEntryConfigPath); nCount = 0; for (int i = 0; i < rAllAssets.Count; i++) { if (rABEntryConfig.ABEntries == null) { continue; } if (!rAllAssets[i].Contains("Assets/Game/GameAsset")) { continue; } var rABEntry = rABEntryConfig.ABEntries.Find((rItem) => { return(rAllAssets[i].Contains(rItem.assetResPath)); }); if (rABEntry == null) { continue; } nCount++; } ABBuilder.Instance.UpdateAllAssetsABLabels(ABBuilder.ABEntryConfigPath); for (int i = 0; i < movedAssets.Length; ++i) { var assetPath = movedAssets[i]; if (assetPath.StartsWith("Assets/Game/GameAsset/GUI/Textures")) { var ai = AssetImporter.GetAtPath(assetPath); if (ai != null) { ai.SaveAndReimport(); } return; } } }
/// <summary> /// 生成AB包的配置项 /// </summary> public List <ABEntry> GenerateABEntries() { var rABEntryConfig = EditorAssists.ReceiveAsset <ABEntryConfig>(ABEntryConfigPath); if (rABEntryConfig == null) { return(new List <ABEntry>()); } return(rABEntryConfig.ABEntries); }
public ABEntryConfig ToEntryConfig(List <EntryData> rEntryDatas) { ABEntryConfig rEntryConfig = EditorAssists.ReceiveAsset <ABEntryConfig>(ABBuilder.ABEntryConfigPath); if (rEntryConfig.ABEntries == null) { rEntryConfig.ABEntries = new List <ABEntry>(); } rEntryConfig.ABEntries.Clear(); for (int i = 0; i < rEntryDatas.Count; i++) { rEntryConfig.ABEntries.Add(rEntryDatas[i].Entry); } return(rEntryConfig); }
public void Refresh() { mABEntryConfig = EditorAssists.ReceiveAsset <ABEntryConfig>(ABBuilder.ABEntryConfigPath); mEntryDatas = this.ToEntryDatas(mABEntryConfig); }
/// <summary> /// 开始同步资源 /// </summary> public static IEnumerator SyncAssets_Async() { AssetBundleManifest rBuildManifest = null; AssetBundleManifest rStreamingManifest = null; string rManifestName = ABBuilder.Instance.GetManifestName(); string rBuildABDir = Path.GetFullPath(ABBuilder.Instance.GetPathPrefix_Assetbundle()).Replace('\\', '/'); string rStreamingDir = Path.GetFullPath("Assets/StreamingAssets/Assetbundles/" + rManifestName).Replace('\\', '/'); string rBuildManifestURL = "file:///" + rBuildABDir + "/" + rManifestName; string rStreamingManifestURL = "file:///" + rStreamingDir + "/" + rManifestName; yield return(EditorCoroutineManager.Start(EditorAssists.LoadManifest(rBuildManifestURL, (rABManifest) => { rBuildManifest = rABManifest; }))); yield return(EditorCoroutineManager.Start(EditorAssists.LoadManifest(rStreamingManifestURL, (rABManifest) => { rStreamingManifest = rABManifest; }))); // 得到文件复制信息 Dict <string, FileVersion> rFileVersionDict = new Dict <string, FileVersion>(); if (rBuildManifest == null) { yield break; } List <string> rSrcFiles = new List <string>(rBuildManifest.GetAllAssetBundles()); List <string> rDistFiles = new List <string>(rStreamingManifest != null ? rStreamingManifest.GetAllAssetBundles() : new string[] { }); for (int i = 0; i < rSrcFiles.Count; i++) { FileVersion rFileVersion = new FileVersion(); rFileVersion.ScrPath = rBuildABDir + "/" + rSrcFiles[i]; rFileVersion.DistPath = rStreamingDir + "/" + rSrcFiles[i]; if (rDistFiles.Contains(rSrcFiles[i])) { string rSrcMD5 = rBuildManifest.GetAssetBundleHash(rSrcFiles[i]).ToString(); string rDistMD5 = rStreamingManifest.GetAssetBundleHash(rSrcFiles[i]).ToString(); if (rSrcMD5.Equals(rDistMD5)) { rFileVersion.State = FileState.Same; } else { rFileVersion.State = FileState.Modify; } } else { rFileVersion.State = FileState.New; } rFileVersionDict.Add(rSrcFiles[i], rFileVersion); } for (int i = 0; i < rDistFiles.Count; i++) { FileVersion rFileVersion = new FileVersion(); rFileVersion.ScrPath = rBuildABDir + "/" + rDistFiles[i]; rFileVersion.DistPath = rStreamingDir + "/" + rDistFiles[i]; if (!rSrcFiles.Contains(rDistFiles[i])) { rFileVersion.State = FileState.Delete; rFileVersionDict.Add(rDistFiles[i], rFileVersion); } } // 开始复制文件,删除文件 foreach (var rPair in rFileVersionDict) { FileVersion rFileVersion = rPair.Value; if (rFileVersion.State == FileState.New || rFileVersion.State == FileState.Modify) { FileInfo rFileInfo = new FileInfo(rFileVersion.DistPath); if (!Directory.Exists(rFileInfo.DirectoryName)) { Directory.CreateDirectory(rFileInfo.DirectoryName); } File.Copy(rFileVersion.ScrPath, rFileVersion.DistPath, true); } else if (rFileVersion.State == FileState.Delete) { if (File.Exists(rFileVersion.DistPath)) { File.Delete(rFileVersion.DistPath); } } } // 复制Manifest File.Copy(rBuildABDir + "/" + rManifestName, rStreamingDir + "/" + rManifestName, true); // 复制版本文件和MD5文件 File.Copy(rBuildABDir + "/" + ABVersion.ABVersion_File_Bin, rStreamingDir + "/" + ABVersion.ABVersion_File_Bin, true); File.Copy(rBuildABDir + "/" + ABVersion.ABVersion_File_MD5, rStreamingDir + "/" + ABVersion.ABVersion_File_MD5, true); AssetDatabase.Refresh(); EditorUtility.DisplayDialog("提示", "复制完成!", "是"); }
private void DrawNativeObject(NativeUnityEngineObject nativeObject) { using (var scope = new EditorGUILayout.HorizontalScope()) { string result = string.Format("classname:{0}, name: {1}, size: {2}", nativeObject.className, nativeObject.name, EditorAssists.ToMemorySize(nativeObject.size)); EditorGUILayout.LabelField(result, GUILayout.MaxWidth(500)); EditorGUILayout.Space(); if (GUILayout.Button("Select", GUILayout.Width(50))) { this._diffWindow.SelectThing(nativeObject); this._diffWindow.Repaint(); } } }
void OnGUI() { using (var scope = new EditorGUILayout.VerticalScope()) { using (var scope1 = new EditorGUILayout.HorizontalScope()) { if (GUILayout.Button("Compare", GUILayout.Width(70))) { if (this._diffWindow.unpackedCrawlPrev == null || this._diffWindow.unpackedCrawl == null) { return; } CompareSnapshot(this._diffWindow.unpackedCrawlPrev, this._diffWindow.unpackedCrawl); } if (GUILayout.Button("Clear", GUILayout.Width(50))) { if (this._extraObjs != null) { this._extraObjs = null; } } EditorGUIUtility.labelWidth = 160; this._needCompareInstanceID = EditorGUILayout.Toggle("Need compare InstanceID: ", this._needCompareInstanceID); } if (this._extraObjs != null) { EditorGUILayout.LabelField(string.Format("Result: {0}, TotalMemory: {1}", this._extraObjs.Length, EditorAssists.ToMemorySize(this._memorySize))); this._scrollPosition = EditorGUILayout.BeginScrollView(this._scrollPosition); for (int i = 0; i < this._extraObjs.Length; i++) { DrawNativeObject(this._extraObjs[i]); } EditorGUILayout.EndScrollView(); } } }
void OnGUI() { if (this._diffWindow == null || this._diffWindow.unpackedCrawl == null) { using (var rScope = new EditorGUILayout.VerticalScope()) { GUI.color = Color.red; EditorGUILayout.LabelField("Has not snap memory..."); GUI.color = Color.white; } return; } var rUnpackedCrawl = this._diffWindow.unpackedCrawl; this.mObjectTypes = new List <string>(); for (int i = 0; i < rUnpackedCrawl.nativeTypes.Length; i++) { if (string.IsNullOrEmpty(rUnpackedCrawl.nativeTypes[i].name)) { continue; } this.mObjectTypes.Add(rUnpackedCrawl.nativeTypes[i].name); } using (var rScope = new EditorGUILayout.VerticalScope()) { EditorGUIUtility.labelWidth = 100; using (var rScope1 = new EditorGUILayout.HorizontalScope()) { mSelectedType = EditorGUILayout.Popup("Object Types: ", mSelectedType, this.mObjectTypes.ToArray()); mNeedFilterType = EditorGUILayout.Toggle("NeedFilterType: ", mNeedFilterType, GUILayout.Width(120)); mSearchTypeText = this.mObjectTypes[mSelectedType]; mSearchTypeText = EditorGUILayout.TextField(mSearchTypeText, GUILayout.Width(90)); this.SearchType_Contain(); if (GUILayout.Button("Search", GUILayout.Width(90))) { this.Search(rUnpackedCrawl); } } } if (mSearchResults != null) { this.mSearchFilterResults = this.SearchFilterContent(); EditorGUILayout.LabelField(string.Format("Search results: {0}/{1}", mSearchFilterResults.Count, mSearchResults.Count)); using (var rScope1 = new EditorGUILayout.HorizontalScope()) { EditorGUIUtility.labelWidth = 150; mSearchText = EditorGUILayout.TextField("Filter Search Content: ", mSearchText); if (GUILayout.Button("Clear", GUILayout.Width(90))) { if (mSearchResults != null) { mSearchResults.Clear(); } if (mSearchFilterResults != null) { mSearchFilterResults.Clear(); } } } EditorGUILayout.Space(); mScrollPos = EditorGUILayout.BeginScrollView(mScrollPos); for (int i = (mCurPage - 1) * mPageCount; i < mCurPage * mPageCount; i++) { if (i >= this.mSearchFilterResults.Count) { continue; } using (var rScope1 = new EditorGUILayout.HorizontalScope()) { string result = string.Format( "classname:{0}, name: {1}, size: {2}", mSearchFilterResults[i].className, mSearchFilterResults[i].name, EditorAssists.ToMemorySize(mSearchFilterResults[i].size)); EditorGUILayout.LabelField(result); if (GUILayout.Button("Select", GUILayout.Width(50))) { this._diffWindow.SelectThing(mSearchFilterResults[i]); this._diffWindow.Repaint(); } } } EditorGUILayout.EndScrollView(); using (var rScope1 = new EditorGUILayout.HorizontalScope()) { int nTotalPage = this.mSearchFilterResults.Count / mPageCount + 1; if (GUILayout.Button("上一页")) { mCurPage--; mCurPage = Mathf.Clamp(mCurPage, 1, nTotalPage); } EditorGUILayout.LabelField(string.Format("{0}/{1}", mCurPage, nTotalPage), GUILayout.Width(40)); if (GUILayout.Button("下一页")) { mCurPage++; mCurPage = Mathf.Clamp(mCurPage, 1, nTotalPage); } } } }
void DrawRotation() { bool reset = false; using (var space = new EditorGUILayout.HorizontalScope()) { reset = GUILayout.Button("R", GUILayout.Width(20f)); Vector3 visible = (serializedObject.targetObject as Transform).localEulerAngles; visible.x = UtilTool.WrapAngle(visible.x); visible.y = UtilTool.WrapAngle(visible.y); visible.z = UtilTool.WrapAngle(visible.z); Axes changed = CheckDifference(mRot); Axes altered = Axes.None; GUILayoutOption opt = GUILayout.MinWidth(30f); if (FloatField("X", ref visible.x, (changed & Axes.X) != 0, false, opt)) { altered |= Axes.X; } if (FloatField("Y", ref visible.y, (changed & Axes.Y) != 0, false, opt)) { altered |= Axes.Y; } if (FloatField("Z", ref visible.z, (changed & Axes.Z) != 0, false, opt)) { altered |= Axes.Z; } if (reset) { mRot.quaternionValue = Quaternion.identity; } else if (altered != Axes.None) { EditorAssists.RegisterUndo("Change Rotation", serializedObject.targetObjects); foreach (var obj in serializedObject.targetObjects) { Transform t = obj as Transform; Vector3 v = t.localEulerAngles; if ((altered & Axes.X) != 0) { v.x = visible.x; } if ((altered & Axes.Y) != 0) { v.y = visible.y; } if ((altered & Axes.Z) != 0) { v.z = visible.z; } t.localEulerAngles = v; } } } }
public void OnGUI(UnityEngine.Rect rect) { mScrollPos = EditorGUILayout.BeginScrollView(mScrollPos); EditorGUILayout.Space(); using (var space1 = new EditorGUILayout.VerticalScope()) { using (var space2 = new EditorGUILayout.HorizontalScope("TextField")) { EditorGUIUtility.labelWidth = 60; EditorGUILayout.TextField("Target: ", ABBuilder.Instance.CurBuildPlatform.ToString()); if (GUILayout.Button(mRefreshTexture, GUILayout.Width(30))) { mABEntryConfig = EditorAssists.ReceiveAsset <ABEntryConfig>(ABBuilder.ABEntryConfigPath); mEntryDatas = this.ToEntryDatas(mABEntryConfig); } } EditorGUILayout.Space(); for (int i = 0; i < mEntryDatas.Count; i++) { using (var space2 = new EditorGUILayout.VerticalScope("TextField")) { using (var space3 = new EditorGUILayout.HorizontalScope()) { mEntryDatas[i].IsSettingOpen = EditorGUILayout.Foldout(mEntryDatas[i].IsSettingOpen, mEntryDatas[i].Entry.abName); if (GUILayout.Button("Del", GUILayout.Width(30))) { mEntryDatas.RemoveAt(i); return; } } EditorGUILayout.Space(); if (mEntryDatas[i].IsSettingOpen) { EditorGUIUtility.labelWidth = 150; mEntryDatas[i].Entry.abName = EditorGUILayout.TextField("Assetbundle Name: ", mEntryDatas[i].Entry.abName); mEntryDatas[i].Entry.abVariant = EditorGUILayout.TextField("Assetbundle Variant: ", mEntryDatas[i].Entry.abVariant); mEntryDatas[i].Entry.assetResPath = EditorGUILayout.TextField("Asset Res Path: ", mEntryDatas[i].Entry.assetResPath); mEntryDatas[i].Entry.assetSrcType = (ABEntry.AssetSourceType)EditorGUILayout.EnumPopup("Asset Src Type: ", mEntryDatas[i].Entry.assetSrcType); mEntryDatas[i].Entry.assetType = EditorGUILayout.TextField("Asset Type: ", mEntryDatas[i].Entry.assetType); mEntryDatas[i].Entry.abClassName = EditorGUILayout.TextField("Assetbundle Class: ", mEntryDatas[i].Entry.abClassName); mEntryDatas[i].Entry.abOriginalResPath = EditorGUILayout.TextField("Assetbundle Original Res: ", mEntryDatas[i].Entry.abOriginalResPath); // @TODO: 需要编写方便的数组Editor控件 //string rFilterStr = ""; //if (mEntryDatas[i].Entry.filerAssets != null) JsonParser.ToJsonNode(mEntryDatas[i].Entry.filerAssets).ToString(); //rFilterStr = EditorGUILayout.TextField("Asset Filter: ", rFilterStr); //if (!string.IsNullOrEmpty(rFilterStr)) //{ // JsonNode rFilterJsonNode = JsonParser.Parse(rFilterStr); // mEntryDatas[i].Entry.filerAssets = rFilterJsonNode.ToList<string>(); //} } } } } EditorGUILayout.EndScrollView(); if (GUILayout.Button("Add")) { mEntryDatas.Add(new EntryData() { IsSettingOpen = false, Entry = new ABEntry() }); } if (GUILayout.Button("Save")) { mABEntryConfig = ToEntryConfig(mEntryDatas); EditorUtility.SetDirty(mABEntryConfig); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } if (GUILayout.Button("Update All Assets AB Labels")) { ABBuilder.Instance.UpdateAllAssetsABLabels(ABBuilder.ABEntryConfigPath); } }