Beispiel #1
0
        private void OnGUI()
        {
            this.platformType = (PlatformType)EditorGUILayout.EnumPopup("PlatformType:", (PlatformType)1);
            this.buildConfig.ClientVersion = EditorGUILayout.TextField("ClientVersion:", this.buildConfig.ClientVersion);
            this.isBuildExe  = EditorGUILayout.Toggle("IsBuildEXE:", this.isBuildExe);
            this.isContainAB = EditorGUILayout.Toggle("IsContainABEXE:", this.isContainAB);
            this.buildType   = (BuildType)EditorGUILayout.EnumPopup("BuildType:", this.buildType);

            switch (buildType)
            {
            case BuildType.Development:
                this.buildOptions = BuildOptions.Development | BuildOptions.AutoRunPlayer | BuildOptions.ConnectWithProfiler | BuildOptions.AllowDebugging;
                break;

            case BuildType.Release:
                this.buildOptions = BuildOptions.None;
                break;
            }

            this.buildAssetBundleOptions = (BuildAssetBundleOptions)EditorGUILayout.EnumFlagsField("BuildAssetBundleOptions(可多选): ", this.buildAssetBundleOptions);

            if (GUILayout.Button("StartBuild"))
            {
                if (this.platformType == PlatformType.None)
                {
                    Log.Error("Please Select Platform!");
                    return;
                }
                int cv = 0;
                if (int.TryParse(this.buildConfig.ClientVersion, out cv))
                {
                    File.WriteAllText(path, JsonHelper.ToJson(this.buildConfig));
                    BuildHelper.Build(this.platformType, this.buildAssetBundleOptions, this.buildOptions, this.isBuildExe, this.isContainAB, cv);
                    AssetDatabase.Refresh();
                }
                else
                {
                    Log.Debug("Input Error!");
                }
            }

            if (GUILayout.Button("BuildInitialAB"))
            {
                BuildHelper.BuildInitial();
            }
        }
Beispiel #2
0
        //自动打AB包
        public static void BuildAB(PackageConfig packageConfig)
        {
            PlatformType platformType = PlatformType.PC;
            bool         isBuildExe   = false;
            bool         isContainAB  = true;

            switch (packageConfig.platformType)
            {
            case PackageConfig.PlatformType.Andriod:
                platformType = PlatformType.Android;
                break;

            case PackageConfig.PlatformType.IOS:
                platformType = PlatformType.IOS;
                break;
            }
            BuildHelper.Build(platformType, packageConfig.buildAssetBundleOptions, packageConfig.buildOptions, isBuildExe, isContainAB);
        }
Beispiel #3
0
        private void OnGUI()
        {
            this.platformType = (PlatformType)EditorGUILayout.EnumPopup(platformType);
#if UNITY_EDITOR && UNITY_ANDROID
            platformType = PlatformType.Android;
#elif UNITY_EDITOR && UNITY_IOS
            platformType = PlatformType.IOS;
#endif
            if (GUILayout.Button("标记"))
            {
                SetPackingTagAndAssetBundle();
            }
            this.isBuildExe  = EditorGUILayout.Toggle("是否打包EXE: ", this.isBuildExe);
            this.isContainAB = EditorGUILayout.Toggle("是否同将资源打进EXE: ", this.isContainAB);
            this.buildType   = (BuildType)EditorGUILayout.EnumPopup("BuildType: ", this.buildType);

            switch (buildType)
            {
            case BuildType.Development:
                this.buildOptions = BuildOptions.Development | BuildOptions.AutoRunPlayer | BuildOptions.ConnectWithProfiler | BuildOptions.AllowDebugging;
                break;

            case BuildType.Release:
                this.buildOptions = BuildOptions.None;
                break;
            }

            this.buildAssetBundleOptions = (BuildAssetBundleOptions)EditorGUILayout.EnumFlagsField("BuildAssetBundleOptions(可多选): ", this.buildAssetBundleOptions);

            if (GUILayout.Button("开始打包"))
            {
                if (this.platformType == PlatformType.None)
                {
                    Log.Error("请选择打包平台!");
                    return;
                }
                BuildHelper.Build(this.platformType, this.buildAssetBundleOptions, this.buildOptions, this.isBuildExe, this.isContainAB);
            }
        }
Beispiel #4
0
        private void OnGUI()
        {
            GUILayout.Label("---------------------------------------- FGUI打包标记");

            UnityEngine.Object[] array = Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.Deep);

            GUILayout.Label("当前选中: " + array.Length + "个物体");

            packetageName = EditorGUILayout.TextField("请输入资源所属包名: ", packetageName);

            if (GUILayout.Button("标记FGUI打包资源"))
            {
                if (string.IsNullOrEmpty(packetageName))
                {
                    Log.Error("请设置包名!");
                    return;
                }

                if (array.Length == 0)
                {
                    Log.Error("未选中需要标记的资源!");
                    return;
                }

                for (int i = 0; i < array.Length; i++)
                {
                    string        filepath = AssetDatabase.GetAssetPath(array[i]);
                    AssetImporter import   = AssetImporter.GetAtPath(filepath);

                    // 需要区分配置文件和资源文件
                    if (filepath.EndsWith(".bytes"))
                    {
                        import.assetBundleName = packetageName + "_cf" + ".unity3d";
                    }
                    else
                    {
                        import.assetBundleName = packetageName + "_res" + ".unity3d";
                    }
                }
                Log.Debug("FGUI资源标记完毕!");
            }

            GUILayout.Label("\n----------------------------------------清除打包标记");

            if (GUILayout.Button("清除全部AB包标记"))
            {
                ClearPackingTagAndAssetBundle();
                AssetDatabase.SaveAssets();
                AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport | ImportAssetOptions.ForceUpdate);
                Log.Debug("清除完成!");
            }

            GUILayout.Label("\n----------------------------------------ET打包工具");

            this.platformType = (PlatformType)EditorGUILayout.EnumPopup(platformType);
            this.isBuildExe   = EditorGUILayout.Toggle("是否打包EXE: ", this.isBuildExe);
            this.isContainAB  = EditorGUILayout.Toggle("是否同将资源打进EXE: ", this.isContainAB);
            this.buildType    = (BuildType)EditorGUILayout.EnumPopup("BuildType: ", this.buildType);

            switch (buildType)
            {
            case BuildType.Development:
                this.buildOptions = BuildOptions.Development | BuildOptions.AutoRunPlayer | BuildOptions.ConnectWithProfiler | BuildOptions.AllowDebugging;
                break;

            case BuildType.Release:
                this.buildOptions = BuildOptions.None;
                break;
            }

            this.buildAssetBundleOptions = (BuildAssetBundleOptions)EditorGUILayout.EnumFlagsField("BuildAssetBundleOptions(可多选): ", this.buildAssetBundleOptions);

            GUILayout.Label("");

            if (GUILayout.Button("开始打包"))
            {
                if (this.platformType == PlatformType.None)
                {
                    Log.Error("请选择打包平台!");
                    return;
                }
                BuildHelper.Build(this.platformType, this.buildAssetBundleOptions, this.buildOptions, this.isBuildExe, this.isContainAB);
            }
        }
Beispiel #5
0
        private void OnGUI()
        {
            this.platformType = (PlatformType)EditorGUILayout.EnumPopup(platformType);
            this.isBuildExe   = EditorGUILayout.Toggle("是否打包EXE: ", this.isBuildExe);
            this.isContainAB  = EditorGUILayout.Toggle("是否同将资源打进EXE: ", this.isContainAB);
            this.buildType    = (BuildType)EditorGUILayout.EnumPopup("BuildType: ", this.buildType);

            switch (buildType)
            {
            case BuildType.Development:
                this.buildOptions = BuildOptions.Development | BuildOptions.AutoRunPlayer | BuildOptions.ConnectWithProfiler | BuildOptions.AllowDebugging;
                break;

            case BuildType.Release:
                this.buildOptions = BuildOptions.None;
                break;
            }

            this.buildAssetBundleOptions = (BuildAssetBundleOptions)EditorGUILayout.EnumFlagsField("BuildAssetBundleOptions(可多选): ", this.buildAssetBundleOptions);

            if (GUILayout.Button("开始打包", GUILayout.Height(30)))
            {
                if (this.platformType == PlatformType.None)
                {
                    Log.Error("请选择打包平台!");
                    return;
                }

                var filepath = Application.dataPath.Replace("Unity/Assets", "") + "Release/" + this.platformType.ToString() + "/StreamingAssets";
                if (Directory.Exists(filepath))
                {
                    Directory.Delete(filepath, true);
                    Log.Debug("一口气删除原文件夹,全部重新生成,时间会久一点,但未改动的文件的md5会不变的,不用担心热更包会很大---Version.txt");
                }

                BuildHelper.Build(this.platformType, this.buildAssetBundleOptions, this.buildOptions, this.isBuildExe, this.isContainAB);
            }

            GUILayout.Space(10);

            if (GUILayout.Button("一键标记AssetBundle"))
            {
                if (EditorUtility.DisplayDialog("温馨提示", "是否一键标记AssetBundle", "确认", "取消"))
                {
                    SetPackingTagAndAssetBundle();
                }
            }

            if (GUILayout.Button("一键清除AssetBundle标记"))
            {
                if (EditorUtility.DisplayDialog("温馨提示", "是否一键清除AssetBundle标记", "确认", "取消"))
                {
                    ClearPackingTagForBundlesFolder();
                    ClearPackingTagForResFolder();
                }
            }


            GUILayout.Space(20);
            GUILayout.Label("看宏:Async=True&&ILRuntime=true,才走AB包模式:PS运行时,看下web服务器开了没,GlobalProto***.txt路径对不");
            EditorGUILayout.BeginVertical("Box");
            {
                mIsSecurity = EditorGUILayout.Toggle("AB包加密", mIsSecurity);
                if (GUILayout.Button("生成Version.txt的json的md5(ps:若加密别重复点击)", GUILayout.Height(30)))
                {
                    if (mIsSecurity)
                    {
                        WillABSecurity();
                    }
                    Log.Debug(mIsSecurity ? "使用-加密模式" : "未使用-加密模式");
                    BuildHelper.GenerateVersionInfo(string.Format("../Release/{0}/StreamingAssets/", this.platformType), mIsSecurity);
                }
            }
            EditorGUILayout.EndVertical();

            GUILayout.Space(20);
            //GUILayout.Label("android\n1.查看ResourcesComponent.cs的LoadOneBundle的方法调用的LoadFromFile方法加128字节.  两处改  \n2.查看AssetsBundleLoaderAsync.cs的LoadAsync的方法.LoadFromFileAsync要加上128字节.  一处改",GUILayout.Height(48));
            GUILayout.Label("原理:生成的ab包后给其加上128个字节,这样有多余的字节AssetStudio工具就无法解析啦(加密)\n读取时,拿到的资源就往后移128个字节,这样就能解析出来(解密文件)");
            if (GUILayout.Button("想过用byte还原回去,但还原不了,只能打包AB时删除原目录或手动解压压缩回去"))
            {
                return;

                var filepath = Application.dataPath.Replace("Unity/Assets", "") + "Release/" + this.platformType.ToString() + "/StreamingAssets";
                var files    = Directory.GetFiles(filepath, "*.*");
                for (int i = 0; i < files.Length; i++)
                {
                    if (files[i].Contains("StreamingAssets.manifest") || files[i].Contains("Version.txt"))
                    {
                    }
                    else
                    {//因为打包要使用,还原回去
                        byte[] oldData = File.ReadAllBytes(files[i]);
                        if (oldData[0] == 0 && oldData[1] == 0)
                        {
                            Log.Debug(files[i]);
                            int newOldLen = oldData.Length - 128;
                            var newData   = new byte[newOldLen];
                            int n         = 0;
                            for (int y = 128; y < oldData.Length; y++)
                            {
                                newData[n] = oldData[y];
                                n++;
                            }
                            FileStream fs = File.OpenWrite(files[i]);
                            fs.Write(newData, 0, newOldLen);
                            fs.Close();
                        }
                    }
                }
            }
        }