using System; using System.Collections.Generic; using Sirenix.OdinInspector; using UnityEditor; using UnityEngine; using YooAsset; using YooAsset.Editor; namespace Stary.Evo.Editor { [CreateAssetMenu(fileName = "BuildAssetDataSetting", menuName = "Evo/BuildAssetDataSetting")] public class BuildAssetDataSetting : SerializedScriptableObject { public void OnEnable() { BuildPipelineViewer(); oldVersionX = packageVersionX; oldVersionY = packageVersionY; oldVersionZ = packageVersionZ; } [HideInInspector] public string packageName; [HideInInspector]public int packageVersionX = 1; [HideInInspector]public int packageVersionY; [HideInInspector]public int packageVersionZ; private int oldVersionX = 1; private int oldVersionY; private int oldVersionZ; [Title("目标环境", titleAlignment: TitleAlignments.Centered)] [HorizontalGroup("BuildSetting"), HideLabel] [OnValueChanged("SetEnvironmentType")] public EnvironmentType environmentType; [Title("构建列表", titleAlignment: TitleAlignments.Centered)] [HorizontalGroup("BuildSetting"), HideLabel] [OnValueChanged("SetBuildPipelines")] public EBuildPipeline selectedBuildPipelines; private const string VerSersionMessage = "(小版本由打包叠加,中版本、大版本更新会重置小版本,如误操作,点击重置按钮即可)"; [Title("版本号", titleAlignment: TitleAlignments.Centered)] [ReadOnly] [HorizontalGroup("BuildSetting/PackageVersion"), HideLabel] public string packageVersion; [Title("版本设置切换", titleAlignment: TitleAlignments.Centered)] [HorizontalGroup("BuildSetting/PackageVersion"), HideLabel, EnumToggleButtons] [HideIf("environmentType", EnvironmentType.Debug)] public VersionPosType VersionType; [Title("升级版本", titleAlignment: TitleAlignments.Centered)] [HorizontalGroup("BuildSetting/PackageVersion"), HideLabel, Button(Icon = SdfIconType.Plus)] [HideIf("environmentType", EnvironmentType.Debug)] public void AddBigVersion() { if (VersionType == VersionPosType.X) { packageVersionX++; if (packageVersionZ > 0) packageVersionZ = 0; } else if (VersionType == VersionPosType.Y) { packageVersionY++; if (packageVersionZ > 0) packageVersionZ = 0; }else if (VersionType == VersionPosType.Z) { packageVersionZ++; } GetPackageVersion(); } [Title("降低版本", titleAlignment: TitleAlignments.Centered)] [HorizontalGroup("BuildSetting/PackageVersion"), HideLabel, Button(Icon = SdfIconType.Dash)] [HideIf("environmentType", EnvironmentType.Debug)] public void SubBigVersion() { if (VersionType == VersionPosType.X) { packageVersionX--; if (packageVersionZ > 0) packageVersionZ = 0; } else if (VersionType == VersionPosType.Y) { packageVersionY--; if (packageVersionZ > 0) packageVersionZ = 0; }else if (VersionType == VersionPosType.Z) { packageVersionZ--; if (packageVersionZ < 0) packageVersionZ = 0; } GetPackageVersion(); } [Title("重置版本", titleAlignment: TitleAlignments.Centered)] [HorizontalGroup("BuildSetting/PackageVersion"), HideLabel, Button(Icon = SdfIconType.ArrowRepeat)] [HideIf("environmentType", EnvironmentType.Debug)] public void RepeatVersion() { packageVersionX = oldVersionX; packageVersionY = oldVersionY; packageVersionZ = oldVersionZ; GetPackageVersion(); } // // [Title("加密列表", titleAlignment: TitleAlignments.Centered)] // [HorizontalGroup("BuildPipeline"), HideLabel] // [ValueDropdown("GetEncryptionServices")] // [OnValueChanged("SetEncryptionServices")] // public Type encryption; [HideLabel] public AbstractBuildPipelineViewer viewer; [HideLabel] private Dictionary _viewers; public void SetEnvironmentType() { GetPackageVersion(); } public string GetBuildPackageVersion(bool isUpdate = false) { if (environmentType == EnvironmentType.Debug) { return "Simulate"; } if (environmentType == EnvironmentType.Release) { string version = $"{packageVersionX}.{packageVersionY}.{packageVersionZ}"; if (isUpdate) packageVersionZ++; packageVersion = $"{packageVersionX}.{packageVersionY}.{packageVersionZ}"; return version; } return null; } public void GetPackageVersion() { SetBuildPipelines(); if (environmentType == EnvironmentType.Debug) { viewer.clearBuildCacheToggle = true; selectedBuildPipelines = EBuildPipeline.EditorSimulateBuildPipeline; packageVersion = "Simulate"; } else if (environmentType == EnvironmentType.Release) { viewer.clearBuildCacheToggle = false; selectedBuildPipelines = EBuildPipeline.ScriptableBuildPipeline; packageVersionX = packageVersionX > 1 ? packageVersionX : 1; packageVersionY = packageVersionY > 0 ? packageVersionY : 0; packageVersion = $"{packageVersionX}.{packageVersionY}.{packageVersionZ}"; } SetBuildPipelines(); viewer.SetBuildCacheToggle(); EditorUtility.SetDirty(this); AssetDatabase.SaveAssets(); //BuildServerPath(); } /// /// 设置当前构建管线 /// /// private void SetBuildPipelines() { BuildPipelineViewer(); } /// /// 生成打包实例 /// public void BuildPipelineViewer() { if (_viewers == null) _viewers = new Dictionary(); if (_viewers.ContainsKey(selectedBuildPipelines)) { viewer = _viewers[selectedBuildPipelines]; } else { switch (selectedBuildPipelines) { case EBuildPipeline.EditorSimulateBuildPipeline: viewer = new SimulateBuildPipelineViewer(this); break; case EBuildPipeline.BuiltinBuildPipeline: viewer = new BuiltinBuildPipelineViewer(this); break; case EBuildPipeline.ScriptableBuildPipeline: viewer = new ScriptableBuildPipelineViewer(this); break; case EBuildPipeline.RawFileBuildPipeline: viewer = new RawfileBuildpipelineViewer(this); break; } _viewers.Add(selectedBuildPipelines, viewer); } } // private List GetEncryptionServices() // { // var encryptionClassTypes = EditorTools.GetAssignableTypes(typeof(IEncryptionServices)); // if (encryption.IsNull()) // { // encryption = encryptionClassTypes[0]; // } // // return encryptionClassTypes; // } // // private void SetEncryptionServices() // { // AssetBundleBuilderSetting.SetPackageEncyptionClassName(packageName, selectedBuildPipelines, // encryption.FullName); // } } public enum VersionPosType { X, Y, Z, } public enum EnvironmentType { Debug, Release, } }