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() { #if UNITY_WEBGL viewer = new ScriptableBuildPipelineViewer(packageName, selectedBuildPipelines.ToString(), packageVersion); #else viewer = new MixedBuildPipelineViewer(packageName, selectedBuildPipelines.ToString(), packageVersion); #endif 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")] private BuildPipelineType selectedBuildPipelines = BuildPipelineType.ScriptableBuildPipeline; 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() { if (environmentType == EnvironmentType.Debug) { viewer.clearBuildCacheToggle = true; //selectedBuildPipelines = BuildPipelineType.EditorSimulateBuildPipeline; packageVersion = "Simulate"; } else if (environmentType == EnvironmentType.Release) { viewer.clearBuildCacheToggle = false; //selectedBuildPipelines = BuildPipelineType.ScriptableBuildPipeline; packageVersionX = packageVersionX > 1 ? packageVersionX : 1; packageVersionY = packageVersionY > 0 ? packageVersionY : 0; packageVersion = $"{packageVersionX}.{packageVersionY}.{packageVersionZ}"; } SetBuildPipelines(); viewer.SetBuildCacheToggle(); EditorUtility.SetDirty(this); AssetDatabase.SaveAssets(); //BuildServerPath(); } /// /// 设置当前构建管线 /// /// public void SetBuildPipelines() { if (packageName.IsNullOrEmpty()) { packageName = BuildAssetWindow.GetBuildPackageName(); } // BuildPipelineViewer(); if (viewer != null) viewer.SetBuildPackageData(packageName, selectedBuildPipelines.ToString(), packageVersion); else { Debug.LogError($"UnityEvo:BuildPipelineViewer 为空!"); } } /// /// 获取当前构建管线名称 /// /// public BuildPipelineType GetBuildPipelinesName() { return selectedBuildPipelines; } // /// // /// 生成打包实例 // /// // 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 BuildPipelineType.EditorSimulateBuildPipeline: // viewer = new SimulateBuildPipelineViewer(packageName, selectedBuildPipelines.ToString(), packageVersion); // break; // case BuildPipelineType.ScriptableBuildPipeline: // viewer = new ScriptableBuildPipelineViewer(packageName, selectedBuildPipelines.ToString(), packageVersion); // break; // case BuildPipelineType.RawFileBuildPipeline: // viewer = new RawfileBuildpipelineViewer(packageName, selectedBuildPipelines.ToString(), packageVersion); // break; // } // // _viewers.Add(selectedBuildPipelines, viewer); // } // } } public enum VersionPosType { X, Y, Z, } public enum EnvironmentType { Debug, Release, } }