Files
plugin-library/Assets/00.StaryEvo/Editor/BuildAsset/BuildAssetDataSetting.cs

241 lines
7.9 KiB
C#
Raw Normal View History

2025-03-31 11:16:52 +08:00
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()
{
buildTarget = EditorUserBuildSettings.activeBuildTarget.ToString();
GetPackageVersion();
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)]
[ReadOnly]
[HorizontalGroup("BuildSetting"), HideLabel]
public string buildTarget;
private const string VerSersionMessage = "(小版本由打包叠加,中版本、大版本更新会重置小版本,如误操作,点击重置按钮即可)";
[TitleGroup("当前打包版本号", alignment: TitleAlignments.Centered)]
[ReadOnly]
[HorizontalGroup("当前打包版本号/PackageVersion"), HideLabel]
public string packageVersion;
[HorizontalGroup("当前打包版本号/PackageVersion"), HideLabel, EnumToggleButtons]
[HideIf("environmentType", EnvironmentType.Debug)]
public VersionPosType VersionType;
[HorizontalGroup("当前打包版本号/PackageVersion"), HideLabel, Button(Icon = SdfIconType.Plus)]
[HideIf("environmentType", EnvironmentType.Debug)]
public void AddBigVersion()
{
if (VersionType == VersionPosType.X)
{
packageVersionX++;
}
else if (VersionType == VersionPosType.Y)
{
packageVersionY++;
}
if (packageVersionZ > 0)
packageVersionZ = 0;
GetPackageVersion();
}
[HorizontalGroup("当前打包版本号/PackageVersion"), HideLabel, Button(Icon = SdfIconType.Dash)]
[HideIf("environmentType", EnvironmentType.Debug)]
public void SubBigVersion()
{
if (VersionType == VersionPosType.X)
{
packageVersionX--;
}
else if (VersionType == VersionPosType.Y)
{
packageVersionY--;
}
if (packageVersionZ > 0)
packageVersionZ = 0;
GetPackageVersion();
}
[HorizontalGroup("当前打包版本号/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]
[OnValueChanged("SetBuildPipelines")]
public EBuildPipeline selectedBuildPipelines;
[Title("加密列表", titleAlignment: TitleAlignments.Centered)]
[HorizontalGroup("BuildPipeline"), HideLabel]
[ValueDropdown("GetEncryptionServices")]
[OnValueChanged("SetEncryptionServices")]
public Type encryption;
[HideLabel] public AbstractBuildPipelineViewer viewer;
[HideLabel] private Dictionary<EBuildPipeline, AbstractBuildPipelineViewer> _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.BuiltinBuildPipeline;
packageVersionX = packageVersionX > 1 ? packageVersionX : 1;
packageVersionY =
packageVersionY > 0 ? packageVersionY : 0;
packageVersion =
$"{packageVersionX}.{packageVersionY}.{packageVersionZ}";
}
viewer.SetBuildCacheToggle();
2025-04-22 10:39:02 +08:00
EditorUtility.SetDirty(this);
2025-03-31 11:16:52 +08:00
AssetDatabase.SaveAssets();
//BuildServerPath();
}
/// <summary>
/// 设置当前构建管线
/// </summary>
/// <returns></returns>
private void SetBuildPipelines()
{
BuildPipelineViewer();
}
/// <summary>
/// 生成打包实例
/// </summary>
public void BuildPipelineViewer()
{
if (_viewers == null)
_viewers = new Dictionary<EBuildPipeline, AbstractBuildPipelineViewer>();
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<Type> 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,
}
public enum EnvironmentType
{
Debug,
Release,
}
}