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(); } [HideLabel] public AbstractBuildPipelineViewer viewer; [HideLabel] private Dictionary _viewers; public void SetEnvironmentType() { GetPackageVersion(); } public string GetBuildPackageVersion(bool isUpdate = false) { string version = ""; if (environmentType == EnvironmentType.Debug) { EditorUtility.SetDirty(this); AssetDatabase.SaveAssets(); version= "Simulate"; } if (environmentType == EnvironmentType.Release) { version = $"{packageVersionX}.{packageVersionY}.{packageVersionZ}"; if (isUpdate) packageVersionZ++; packageVersion = $"{packageVersionX}.{packageVersionY}.{packageVersionZ}"; } BuildPipelineViewer(); EditorUtility.SetDirty(this); AssetDatabase.SaveAssets(); return version; } 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]; viewer.SetBuildPackageData(packageName, selectedBuildPipelines.ToString(), packageVersion); } else { switch (selectedBuildPipelines) { case EBuildPipeline.EditorSimulateBuildPipeline: viewer = new SimulateBuildPipelineViewer(packageName, selectedBuildPipelines.ToString(), packageVersion); break; case EBuildPipeline.BuiltinBuildPipeline: viewer = new BuiltinBuildPipelineViewer(packageName, selectedBuildPipelines.ToString(), packageVersion); break; case EBuildPipeline.ScriptableBuildPipeline: viewer = new ScriptableBuildPipelineViewer(packageName, selectedBuildPipelines.ToString(), packageVersion); break; case EBuildPipeline.RawFileBuildPipeline: viewer = new RawfileBuildpipelineViewer(packageName, selectedBuildPipelines.ToString(), packageVersion); break; } _viewers.Add(selectedBuildPipelines, viewer); } } } public enum VersionPosType { X, Y, Z, } public enum EnvironmentType { Debug, Release, } }