Example #1
0
 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";
 }
Example #2
0
        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;
                }
            }
        }
Example #3
0
        /// <summary>
        /// 生成AB包的配置项
        /// </summary>
        public List <ABEntry> GenerateABEntries()
        {
            var rABEntryConfig = EditorAssists.ReceiveAsset <ABEntryConfig>(ABEntryConfigPath);

            if (rABEntryConfig == null)
            {
                return(new List <ABEntry>());
            }
            return(rABEntryConfig.ABEntries);
        }
Example #4
0
        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);
        }
Example #5
0
 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("提示", "复制完成!", "是");
        }
Example #7
0
 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();
         }
     }
 }
Example #8
0
        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();
                }
            }
        }
Example #9
0
        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);
                    }
                }
            }
        }
Example #10
0
        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;
                    }
                }
            }
        }
Example #11
0
        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);
            }
        }