コード例 #1
0
        /// <summary>
        /// 执行构建
        /// </summary>
        private void ExecuteBuild()
        {
            string          defaultOutputRoot = AssetBundleBuilderHelper.GetDefaultOutputRoot();
            BuildParameters buildParameters   = new BuildParameters();

            buildParameters.OutputRoot           = defaultOutputRoot;
            buildParameters.BuildTarget          = _buildTarget;
            buildParameters.BuildMode            = (EBuildMode)_buildModeField.value;
            buildParameters.BuildVersion         = _buildVersionField.value;
            buildParameters.BuildinTags          = _buildinTagsField.value;
            buildParameters.VerifyBuildingResult = true;
            buildParameters.EnableAddressable    = AssetBundleCollectorSettingData.Setting.EnableAddressable;
            buildParameters.AppendFileExtension  = _appendExtensionToggle.value;
            buildParameters.CopyBuildinTagFiles  = _copyBuildinTagFilesToggle.value;
            buildParameters.EncryptionServices   = CreateEncryptionServicesInstance();
            buildParameters.CompressOption       = (ECompressOption)_compressionField.value;

            AssetBundleBuilder builder = new AssetBundleBuilder();

            builder.Run(buildParameters);
        }
コード例 #2
0
        /// <summary>
        /// 模拟构建
        /// </summary>
        public static void SimulateBuild()
        {
            string          defaultOutputRoot = AssetBundleBuilderHelper.GetDefaultOutputRoot();
            BuildParameters buildParameters   = new BuildParameters();

            buildParameters.OutputRoot        = defaultOutputRoot;
            buildParameters.BuildTarget       = EditorUserBuildSettings.activeBuildTarget;
            buildParameters.BuildMode         = EBuildMode.SimulateBuild;
            buildParameters.BuildVersion      = 999;
            buildParameters.EnableAddressable = AssetBundleCollectorSettingData.Setting.EnableAddressable;

            AssetBundleBuilder builder = new AssetBundleBuilder();
            bool buildResult           = builder.Run(buildParameters);

            if (buildResult)
            {
                string pipelineOutputDirectory = AssetBundleBuilderHelper.MakePipelineOutputDirectory(buildParameters.OutputRoot, buildParameters.BuildTarget);
                _manifestFilePath = $"{pipelineOutputDirectory}_{EBuildMode.SimulateBuild}/{YooAssetSettingsData.GetPatchManifestFileName(buildParameters.BuildVersion)}";
            }
            else
            {
                _manifestFilePath = null;
            }
        }
コード例 #3
0
        public void CreateGUI()
        {
            try
            {
                VisualElement root = this.rootVisualElement;

                // 加载布局文件
                var visualAsset = EditorHelper.LoadWindowUXML <AssetBundleBuilderWindow>();
                if (visualAsset == null)
                {
                    return;
                }

                visualAsset.CloneTree(root);

                _buildTarget = EditorUserBuildSettings.activeBuildTarget;
                _encryptionServicesClassTypes = GetEncryptionServicesClassTypes();
                _encryptionServicesClassNames = _encryptionServicesClassTypes.Select(t => t.FullName).ToList();

                // 输出目录
                string defaultOutputRoot       = AssetBundleBuilderHelper.GetDefaultOutputRoot();
                string pipelineOutputDirectory = AssetBundleBuilderHelper.MakePipelineOutputDirectory(defaultOutputRoot, _buildTarget);
                _buildOutputField = root.Q <TextField>("BuildOutput");
                _buildOutputField.SetValueWithoutNotify(pipelineOutputDirectory);
                _buildOutputField.SetEnabled(false);

                // 构建版本
                _buildVersionField = root.Q <IntegerField>("BuildVersion");
                _buildVersionField.SetValueWithoutNotify(AssetBundleBuilderSettingData.Setting.BuildVersion);
                _buildVersionField.RegisterValueChangedCallback(evt =>
                {
                    AssetBundleBuilderSettingData.Setting.BuildVersion = _buildVersionField.value;
                });

                // 构建模式
                _buildModeField = root.Q <EnumField>("BuildMode");
                _buildModeField.Init(AssetBundleBuilderSettingData.Setting.BuildMode);
                _buildModeField.SetValueWithoutNotify(AssetBundleBuilderSettingData.Setting.BuildMode);
                _buildModeField.style.width = 300;
                _buildModeField.RegisterValueChangedCallback(evt =>
                {
                    AssetBundleBuilderSettingData.Setting.BuildMode = (EBuildMode)_buildModeField.value;
                    RefreshWindow();
                });

                // 内置资源标签
                _buildinTagsField = root.Q <TextField>("BuildinTags");
                _buildinTagsField.SetValueWithoutNotify(AssetBundleBuilderSettingData.Setting.BuildTags);
                _buildinTagsField.RegisterValueChangedCallback(evt =>
                {
                    AssetBundleBuilderSettingData.Setting.BuildTags = _buildinTagsField.value;
                });

                // 加密方法
                var encryptionContainer = root.Q("EncryptionContainer");
                if (_encryptionServicesClassNames.Count > 0)
                {
                    int defaultIndex = GetEncryptionDefaultIndex(AssetBundleBuilderSettingData.Setting.EncyptionClassName);
                    _encryptionField             = new PopupField <string>(_encryptionServicesClassNames, defaultIndex);
                    _encryptionField.label       = "Encryption";
                    _encryptionField.style.width = 300;
                    _encryptionField.RegisterValueChangedCallback(evt =>
                    {
                        AssetBundleBuilderSettingData.Setting.EncyptionClassName = _encryptionField.value;
                    });
                    encryptionContainer.Add(_encryptionField);
                }
                else
                {
                    _encryptionField             = new PopupField <string>();
                    _encryptionField.label       = "Encryption";
                    _encryptionField.style.width = 300;
                    encryptionContainer.Add(_encryptionField);
                }

                // 压缩方式
                _compressionField = root.Q <EnumField>("Compression");
                _compressionField.Init(AssetBundleBuilderSettingData.Setting.CompressOption);
                _compressionField.SetValueWithoutNotify(AssetBundleBuilderSettingData.Setting.CompressOption);
                _compressionField.style.width = 300;
                _compressionField.RegisterValueChangedCallback(evt =>
                {
                    AssetBundleBuilderSettingData.Setting.CompressOption = (ECompressOption)_compressionField.value;
                });

                // 附加后缀格式
                _appendExtensionToggle = root.Q <Toggle>("AppendExtension");
                _appendExtensionToggle.SetValueWithoutNotify(AssetBundleBuilderSettingData.Setting.AppendExtension);
                _appendExtensionToggle.RegisterValueChangedCallback(evt =>
                {
                    AssetBundleBuilderSettingData.Setting.AppendExtension = _appendExtensionToggle.value;
                });

                // 拷贝首包文件
                _copyBuildinTagFilesToggle = root.Q <Toggle>("CopyBuildinFiles");
                _copyBuildinTagFilesToggle.SetValueWithoutNotify(AssetBundleBuilderSettingData.Setting.CopyBuildinTagFiles);
                _copyBuildinTagFilesToggle.RegisterValueChangedCallback(evt =>
                {
                    AssetBundleBuilderSettingData.Setting.CopyBuildinTagFiles = _copyBuildinTagFilesToggle.value;
                });

                // 构建按钮
                var buildButton = root.Q <Button>("Build");
                buildButton.clicked += BuildButton_clicked;;

                RefreshWindow();
            }
            catch (Exception e)
            {
                Debug.LogError(e.ToString());
            }
        }