框架上传
This commit is contained in:
241
Assets/00.StaryEvo/Editor/BuildAsset/BuildAssetDataSetting.cs
Normal file
241
Assets/00.StaryEvo/Editor/BuildAsset/BuildAssetDataSetting.cs
Normal file
@@ -0,0 +1,241 @@
|
||||
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();
|
||||
|
||||
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,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 39a67460f559484da2b52def8ff05571
|
||||
timeCreated: 1741844184
|
||||
60
Assets/00.StaryEvo/Editor/BuildAsset/BuildAssetEntity.cs
Normal file
60
Assets/00.StaryEvo/Editor/BuildAsset/BuildAssetEntity.cs
Normal file
@@ -0,0 +1,60 @@
|
||||
using System;
|
||||
using Sirenix.OdinInspector;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Stary.Evo.Editor
|
||||
{
|
||||
[Serializable]
|
||||
public class BuildAssetEntity
|
||||
{
|
||||
public BuildAssetEntity(string HorizontalGroupName,string ButtonName ,Action OnClickAction )
|
||||
{
|
||||
this.HorizontalGroupName = HorizontalGroupName;
|
||||
this.ButtonName = ButtonName;
|
||||
this.OnClickAction = OnClickAction;
|
||||
}
|
||||
|
||||
|
||||
private Color messageColor = Color.white;
|
||||
private string messageText = "点击开始进程!!!!!";
|
||||
private bool showInfoBox = true;
|
||||
private string HorizontalGroupName;
|
||||
private string ButtonName;
|
||||
private Action OnClickAction;
|
||||
[HorizontalGroup("@ HorizontalGroupName")]
|
||||
[Button("@ ButtonName", ButtonSizes.Large)]
|
||||
[InfoBox("@ messageText", InfoMessageType.Error, "@ showInfoBox==false")]
|
||||
[InfoBox("@ messageText", InfoMessageType.Info, "@ showInfoBox==true")]
|
||||
private void CopyDll()
|
||||
{
|
||||
try
|
||||
{
|
||||
OnClickAction?.Invoke();
|
||||
showInfoBox = true;
|
||||
messageColor = Color.green;
|
||||
messageText = "进程结束!!!!!";
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.LogError(e);
|
||||
showInfoBox = false;
|
||||
messageText =$"进程存在异常,异常信息为:【{e.Message}】" ;
|
||||
messageColor = Color.red;
|
||||
}
|
||||
}
|
||||
|
||||
[HorizontalGroup("@ HorizontalGroupName", Width = 68)]
|
||||
[Button(ButtonSizes.Large, Icon = SdfIconType.CheckCircleFill, IconAlignment = IconAlignment.RightEdge,
|
||||
ButtonHeight = 68),
|
||||
GUIColor("@messageColor")]
|
||||
private void CopyDll1()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
public void SetButtonName(string ButtonName)
|
||||
{
|
||||
this.ButtonName = ButtonName;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 689d3c7b06e841668647fc00ff0a3dd8
|
||||
timeCreated: 1741593629
|
||||
281
Assets/00.StaryEvo/Editor/BuildAsset/BuildAssetWindow.cs
Normal file
281
Assets/00.StaryEvo/Editor/BuildAsset/BuildAssetWindow.cs
Normal file
@@ -0,0 +1,281 @@
|
||||
/****************************************************
|
||||
文件:BuildAssetWindow.cs
|
||||
作者:xosmo_
|
||||
邮箱:
|
||||
日期:2025/3/10 10:43:20
|
||||
功能:
|
||||
*****************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using EditorFramework;
|
||||
using HybridCLR.Editor;
|
||||
using HybridCLR.Editor.Commands;
|
||||
using Sirenix.OdinInspector;
|
||||
using Sirenix.OdinInspector.Editor;
|
||||
using UnityEditor;
|
||||
using UnityEditorInternal;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Serialization;
|
||||
using YooAsset;
|
||||
using YooAsset.Editor;
|
||||
|
||||
namespace Stary.Evo.Editor
|
||||
{
|
||||
public class BuildAssetWindow : OdinEditorWindow
|
||||
{
|
||||
|
||||
private static BuildAssetWindow window;
|
||||
[MenuItem("Evo/资源打包工具")]
|
||||
static void ShowWindows()
|
||||
{
|
||||
if (CreatAssetWindow.GetCreatDomainAll().Count <= 0)
|
||||
{
|
||||
EditorUtility.DisplayDialog("提示", "不存在Domain元素,无法打开此面板,请先创建Domain元素", "确定" );
|
||||
return;
|
||||
}
|
||||
window = (BuildAssetWindow)EditorWindow.GetWindow(typeof(BuildAssetWindow));
|
||||
window.Show();
|
||||
}
|
||||
|
||||
|
||||
|
||||
protected override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
GetBuildPackageNames();
|
||||
}
|
||||
|
||||
public static void RemoveBuildAssetWindow()
|
||||
{
|
||||
if(window != null)
|
||||
window.Close();
|
||||
}
|
||||
protected void OnSelectionChange()
|
||||
{
|
||||
EditorUtility.SetDirty(BuildAssetDataSetting);
|
||||
AssetDatabase.SaveAssets();
|
||||
//AssetDatabase.Refresh();
|
||||
}
|
||||
|
||||
[Title("包裹列表", titleAlignment: TitleAlignments.Centered)]
|
||||
[HorizontalGroup("BuildPipeline"), HideLabel]
|
||||
[ValueDropdown("GetBuildPackageNames")]
|
||||
[OnValueChanged("SetBuildPackageNames")]
|
||||
public string selectedPackageNames;
|
||||
|
||||
public static string packageName;
|
||||
#region HyBridCLRBuild
|
||||
|
||||
[Title("HyBridCLRBuild", titleAlignment: TitleAlignments.Centered)] [HideLabel]
|
||||
public BuildAssetEntity hyBridClrBuildEntity =
|
||||
new BuildAssetEntity("HyBridCLRBuild", "DllBuildTarget", () =>
|
||||
{
|
||||
//PrebuildCommand.GenerateAll();
|
||||
CompileDllCommand.CompileDllActiveBuildTarget();
|
||||
});
|
||||
#endregion
|
||||
|
||||
|
||||
#region MarkAsset
|
||||
|
||||
[Title("MarkAsset", titleAlignment: TitleAlignments.Centered)] [HideLabel]
|
||||
public BuildAssetEntity markAssetEntity =
|
||||
new BuildAssetEntity("MarkAsset", "MarkAsset", MarkAdressable.AddMark);
|
||||
|
||||
#endregion
|
||||
|
||||
#region BuildAsset
|
||||
|
||||
|
||||
|
||||
[InlineEditor(InlineEditorObjectFieldModes.CompletelyHidden)]
|
||||
[HideLabel] public BuildAssetDataSetting BuildAssetDataSetting;
|
||||
|
||||
/// <summary>
|
||||
/// 检测当前所有包裹
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private List<string> GetBuildPackageNames()
|
||||
{
|
||||
List<string> result = new List<string>();
|
||||
foreach (var name in CreatAssetWindow.GetCreatDomainAllName())
|
||||
{
|
||||
result.Add(name);
|
||||
}
|
||||
|
||||
if (selectedPackageNames.IsNullOrEmpty())
|
||||
{
|
||||
// string buildPackageName = DataSetting.packageName;
|
||||
// if (result.Exists(p => p == buildPackageName))
|
||||
// {
|
||||
// selectedPackageNames = buildPackageName;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
selectedPackageNames = result[0];
|
||||
//}
|
||||
|
||||
|
||||
}
|
||||
SetBuildPackageNames();
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置当前包裹
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private void SetBuildPackageNames()
|
||||
{
|
||||
//PlayerPrefs.SetString("BuildPackageNames", selectedPackageNames);
|
||||
// DataSetting.packageName = selectedPackageNames;
|
||||
packageName = selectedPackageNames;
|
||||
// DataSetting = Resources.Load<BuildAssetDataSetting>("BuildAssetDataSetting");
|
||||
string buildAssetDataSettingPath = $"Assets/Domain/{selectedPackageNames}/Conf/BuildAssetDataSetting.asset";
|
||||
BuildAssetDataSetting buildAssetDataSetting =
|
||||
AssetDatabase.LoadAssetAtPath<BuildAssetDataSetting>(buildAssetDataSettingPath);
|
||||
if (buildAssetDataSetting != null)
|
||||
{
|
||||
BuildAssetDataSetting = buildAssetDataSetting;
|
||||
Init();
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError($"UnityEvo:BuildAssetDataSetting 不存在,请检查路径{buildAssetDataSettingPath}");
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取当前包裹
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static string GetBuildPackageName()
|
||||
{
|
||||
return packageName;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Update
|
||||
|
||||
[Title("BuildAssetButton", titleAlignment: TitleAlignments.Centered)] [HideLabel]
|
||||
public BuildAssetEntity onBuildPipelineEntity;
|
||||
|
||||
[FormerlySerializedAs("UpdateServerPath")]
|
||||
[TitleGroup("UpdateAssetButton", alignment: TitleAlignments.Centered)][ShowIf("@ BuildAssetDataSetting.environmentType== EnvironmentType.Release",true)]
|
||||
[ReadOnly]
|
||||
[InfoBox("服务器资源盘位未存在", InfoMessageType.Error, "@ _isCheckDriveExist==false")]
|
||||
[InfoBox("1、映射网络驱动器\n2、添加http://192.168.31.100:5005/alist/HotRefresh地址\n3、设置盘符为Z盘", InfoMessageType.Info,
|
||||
"@ _isCheckDriveExist==false")]
|
||||
public string updateServerPath;
|
||||
|
||||
private bool _isCheckDriveExist;
|
||||
|
||||
[TitleGroup("UpdateAssetButton", alignment: TitleAlignments.Centered)] [HideLabel][ShowIf("@ _isCheckDriveExist&&BuildAssetDataSetting.environmentType== EnvironmentType.Release",true)]
|
||||
public BuildAssetEntity onUpdateBuildPipelineEntity;
|
||||
|
||||
|
||||
private void OnBuildPipeline()
|
||||
{
|
||||
if (EditorUtility.DisplayDialog("提示", $"开始构建资源包[{selectedPackageNames}]!", "Yes", "No"))
|
||||
{
|
||||
EditorTools.ClearUnityConsole();
|
||||
EditorApplication.delayCall += BuildAssetDataSetting.viewer.ExecuteBuild;
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning("[Build] 打包已经取消");
|
||||
}
|
||||
}
|
||||
|
||||
private void OnUpdateBuildPipeline()
|
||||
{
|
||||
|
||||
if (EditorUtility.DisplayDialog("提示", $"开始上传至服务器[{selectedPackageNames}]!", "Yes", "No"))
|
||||
{
|
||||
Stary.Evo.Editor.FileUtility.CopyDirectory(
|
||||
$"{AssetBundleBuilderHelper.GetDefaultBuildOutputRoot()}/{EditorUserBuildSettings.activeBuildTarget}/{BuildAssetDataSetting.packageName}/{BuildAssetDataSetting.packageVersion}",
|
||||
updateServerPath);
|
||||
CreatePackageVersionJson();
|
||||
|
||||
|
||||
BuildAssetDataSetting.GetBuildPackageVersion(true);
|
||||
|
||||
EditorUtility.DisplayDialog("提示", $"上传服务器完成!", "确定");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning("[Update] 上传已经取消");
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
protected void Init()
|
||||
{
|
||||
//Update
|
||||
//检测Z盘
|
||||
_isCheckDriveExist = Stary.Evo.Editor.FileUtility.CheckDriveExists("Z");
|
||||
|
||||
onBuildPipelineEntity =
|
||||
new BuildAssetEntity("打包", $"打包资源包【版本:{BuildAssetDataSetting.packageVersion}】", OnBuildPipeline);
|
||||
onUpdateBuildPipelineEntity =
|
||||
new BuildAssetEntity("更新", $"更新至服务器【版本:{BuildAssetDataSetting.packageVersion}】", OnUpdateBuildPipeline);
|
||||
|
||||
}
|
||||
|
||||
private Vector2 scroll;
|
||||
|
||||
protected override void DrawEditor(int index)
|
||||
{
|
||||
scroll = GUILayout.BeginScrollView(scroll);
|
||||
{
|
||||
base.DrawEditor(index);
|
||||
BuildServerPath();
|
||||
}
|
||||
GUILayout.EndScrollView();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 生成服务器路径
|
||||
/// </summary>
|
||||
private void BuildServerPath()
|
||||
{
|
||||
if (!_isCheckDriveExist)
|
||||
{
|
||||
return;
|
||||
}
|
||||
updateServerPath =
|
||||
$"Z:/{Application.productName}/{BuildAssetDataSetting.packageName}/{EditorUserBuildSettings.activeBuildTarget}/{BuildAssetDataSetting.packageVersion}";
|
||||
if (!Directory.Exists(updateServerPath))
|
||||
Directory.CreateDirectory(updateServerPath);
|
||||
|
||||
//更新Button文字
|
||||
onBuildPipelineEntity.SetButtonName($"打包资源包【版本:{BuildAssetDataSetting.packageVersion}】");
|
||||
onUpdateBuildPipelineEntity.SetButtonName($"更新至服务器【版本:{BuildAssetDataSetting.packageVersion}】");
|
||||
}
|
||||
|
||||
private void CreatePackageVersionJson()
|
||||
{
|
||||
string mainResDomainPath = $"Assets/Domain/{selectedPackageNames}/Conf/HotfixMainResDomain.asset";
|
||||
HotfixMainResDomain mainResDomain =
|
||||
AssetDatabase.LoadAssetAtPath<HotfixMainResDomain>(mainResDomainPath);
|
||||
|
||||
if (mainResDomain != null)
|
||||
{
|
||||
mainResDomain.hotfixMainResDomainEntity.packageVersion = BuildAssetDataSetting.packageVersion;
|
||||
mainResDomain.hotfixMainResDomainEntity.pathconfig =
|
||||
$"{Application.productName}/{BuildAssetDataSetting.packageName}/{EditorUserBuildSettings.activeBuildTarget}/{BuildAssetDataSetting.packageVersion}";
|
||||
}
|
||||
|
||||
AssetDatabase.Refresh();
|
||||
// 保存更改
|
||||
AssetDatabase.SaveAssets();
|
||||
string serverPath = $"Z:/HybridclrConfigData/{BuildAssetDataSetting.packageName}/{EditorUserBuildSettings.activeBuildTarget}/";
|
||||
//直接保存服务器路径下,本地不保存
|
||||
EditorFrameworkUtils.SaveJson(mainResDomain.hotfixMainResDomainEntity, serverPath, Application.productName);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 80143df6d596f664f97e7139d7811d2d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,49 @@
|
||||
using System;
|
||||
using UnityEditor;
|
||||
using YooAsset;
|
||||
using YooAsset.Editor;
|
||||
|
||||
namespace Stary.Evo.Editor
|
||||
{
|
||||
[Serializable]
|
||||
public class BuiltinBuildPipelineViewer :AbstractBuildPipelineViewer
|
||||
{
|
||||
public BuiltinBuildPipelineViewer(BuildAssetDataSetting packageName) : base(packageName)
|
||||
{
|
||||
}
|
||||
|
||||
public override void ExecuteBuild()
|
||||
{
|
||||
var fileNameStyle = AssetBundleBuilderSetting.GetPackageFileNameStyle(dataSetting.packageName, dataSetting.selectedBuildPipelines);
|
||||
var buildinFileCopyOption = AssetBundleBuilderSetting.GetPackageBuildinFileCopyOption(dataSetting.packageName, dataSetting.selectedBuildPipelines);
|
||||
var buildinFileCopyParams = AssetBundleBuilderSetting.GetPackageBuildinFileCopyParams(dataSetting.packageName, dataSetting.selectedBuildPipelines);
|
||||
var compressOption = AssetBundleBuilderSetting.GetPackageCompressOption(dataSetting.packageName, dataSetting.selectedBuildPipelines);
|
||||
var clearBuildCache = AssetBundleBuilderSetting.GetPackageClearBuildCache(dataSetting.packageName, dataSetting.selectedBuildPipelines);
|
||||
var useAssetDependencyDB = AssetBundleBuilderSetting.GetPackageUseAssetDependencyDB(dataSetting.packageName, dataSetting.selectedBuildPipelines);
|
||||
|
||||
BuiltinBuildParameters buildParameters = new BuiltinBuildParameters();
|
||||
buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot();
|
||||
buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot();
|
||||
buildParameters.BuildPipeline = dataSetting.selectedBuildPipelines.ToString();
|
||||
buildParameters.BuildBundleType = (int)EBuildBundleType.AssetBundle;
|
||||
buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget;
|
||||
buildParameters.PackageName = dataSetting.packageName;
|
||||
buildParameters.PackageVersion =dataSetting.GetBuildPackageVersion();
|
||||
buildParameters.EnableSharePackRule = true;
|
||||
buildParameters.VerifyBuildingResult = true;
|
||||
buildParameters.FileNameStyle = fileNameStyle;
|
||||
buildParameters.BuildinFileCopyOption = buildinFileCopyOption;
|
||||
buildParameters.BuildinFileCopyParams = buildinFileCopyParams;
|
||||
buildParameters.CompressOption = compressOption;
|
||||
buildParameters.ClearBuildCacheFiles = clearBuildCache;
|
||||
buildParameters.UseAssetDependencyDB = useAssetDependencyDB;
|
||||
buildParameters.EncryptionServices = CreateEncryptionInstance();
|
||||
|
||||
BuiltinBuildPipeline pipeline = new BuiltinBuildPipeline();
|
||||
var buildResult = pipeline.Run(buildParameters, true);
|
||||
if (buildResult.Success)
|
||||
EditorUtility.RevealInFinder(buildResult.OutputPackageDirectory);
|
||||
base.ExecuteBuild();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ac3d61d6f0744f02a2f038fdeed98b75
|
||||
timeCreated: 1741830306
|
||||
272
Assets/00.StaryEvo/Editor/BuildAsset/CreatAssetWindow.cs
Normal file
272
Assets/00.StaryEvo/Editor/BuildAsset/CreatAssetWindow.cs
Normal file
@@ -0,0 +1,272 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using EditorFramework;
|
||||
using HybridCLR.Editor;
|
||||
using HybridCLR.Editor.Settings;
|
||||
using Sirenix.OdinInspector;
|
||||
using Sirenix.OdinInspector.Editor;
|
||||
using Sirenix.Utilities;
|
||||
using UnityEditor;
|
||||
using UnityEditorInternal;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Stary.Evo.Editor
|
||||
{
|
||||
public class CreatAssetWindow : OdinEditorWindow
|
||||
{
|
||||
[MenuItem("Evo/创建Domain作用域")]
|
||||
static void Init()
|
||||
{
|
||||
// Get existing open window or if none, make a new one:
|
||||
CreatAssetWindow window = (CreatAssetWindow)EditorWindow.GetWindow(typeof(CreatAssetWindow));
|
||||
window.Show();
|
||||
}
|
||||
|
||||
[TitleGroup("创建Domain作用域")] public string domain;
|
||||
|
||||
[TitleGroup("创建Domain作用域")]
|
||||
[Button("创建Domain", ButtonSizes.Large)]
|
||||
public async void CreatDomain()
|
||||
{
|
||||
if (GetCreatDomainAll().Count>0)
|
||||
{
|
||||
EditorUtility.DisplayDialog("错误!", "Domain仅可以创建一个,请在下方删除存在的Domain", "确定");
|
||||
return;
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(domain))
|
||||
{
|
||||
EditorUtility.DisplayDialog("错误!", "请输入将要创建Domain的编号", "确定");
|
||||
return;
|
||||
}
|
||||
|
||||
string domainPath = $"{Application.dataPath}/Domain/{domain}";
|
||||
if (Directory.Exists(domainPath+"/AddressableRes/Config/DomainConfig.asset"))
|
||||
{
|
||||
EditorUtility.DisplayDialog("错误!", $"\"{domain}\"已经存在,无法创建", "确定");
|
||||
return;
|
||||
}
|
||||
|
||||
Directory.CreateDirectory(domainPath);
|
||||
|
||||
//美术资源存放文件夹
|
||||
string resPath = $"{domainPath}/AddressableRes";
|
||||
Directory.CreateDirectory(resPath);
|
||||
//创建音频文件夹
|
||||
Directory.CreateDirectory(resPath + "/Audios");
|
||||
//创建Config文件夹
|
||||
Directory.CreateDirectory(resPath + "/Config");
|
||||
//创建Dll文件夹
|
||||
Directory.CreateDirectory(resPath + "/Dll");
|
||||
//创建Prefabs文件夹
|
||||
Directory.CreateDirectory(resPath + "/Prefabs");
|
||||
//创建Scenes文件夹
|
||||
Directory.CreateDirectory(resPath + "/Scenes");
|
||||
//创建SpriteAtlas文件夹
|
||||
Directory.CreateDirectory(resPath + "/SpriteAtlas");
|
||||
//创建Sprites文件夹
|
||||
Directory.CreateDirectory(resPath + "/Sprites");
|
||||
//创建Video文件夹
|
||||
Directory.CreateDirectory(resPath + "/Video");
|
||||
|
||||
await File.WriteAllTextAsync($"{resPath}/这里放所有参与热更的资源.hint", "");
|
||||
|
||||
//主入口预制件
|
||||
GameObject gameObj = new GameObject(domain);
|
||||
gameObj.transform.position = Vector3.zero;
|
||||
gameObj.transform.rotation = Quaternion.identity;
|
||||
gameObj.name = domain;
|
||||
Directory.CreateDirectory($"{resPath}/Prefabs");
|
||||
string rootPfbFilePath = $"Assets/Domain/{domain}/AddressableRes/Prefabs/{domain}.prefab";
|
||||
var localPath = AssetDatabase.GenerateUniqueAssetPath(rootPfbFilePath);
|
||||
PrefabUtility.SaveAsPrefabAsset(gameObj, localPath);
|
||||
|
||||
//存放脚本文件夹
|
||||
string scriptsPath = $"{domainPath}/HotUpdate";
|
||||
Directory.CreateDirectory(scriptsPath);
|
||||
await File.WriteAllTextAsync($"{scriptsPath}/这里放所有参与热更的脚本文件.hint", "该文件夹中的程序集定义文件,请勿删除,非常重要。");
|
||||
|
||||
//创建配置文件夹
|
||||
string confPath = $"{domainPath}/Conf";
|
||||
Directory.CreateDirectory(confPath);
|
||||
|
||||
|
||||
//程序集配置资源
|
||||
|
||||
string hotfixDomain = $"HotUpdate_{domain}";
|
||||
|
||||
string hotfixDomainAsmdef = $"{scriptsPath}/{hotfixDomain}.asmdef";
|
||||
await using (var writer = new StreamWriter(hotfixDomainAsmdef))
|
||||
{
|
||||
string body = Resources.Load<TextAsset>("AssemblyDefinitionTemplate").text;
|
||||
body = body.Replace("MODULE_IDENT", hotfixDomain);
|
||||
body = body.Replace("ROOT_NAMESPACE", hotfixDomain);
|
||||
await writer.WriteAsync(body);
|
||||
}
|
||||
|
||||
// await File.WriteAllTextAsync($"{scriptsPath}/{hotfixDomain}.asmdef", body);
|
||||
|
||||
|
||||
// string architectureClassName = $"{domain}Architecture";
|
||||
// string architectureClassPath = $"{scriptsPath}/{architectureClassName}.txt";
|
||||
// //await File.WriteAllTextAsync($"{scriptsPath}/{architectureClassName}.cs", architectureTemplate);
|
||||
//
|
||||
// await using (var writer = new StreamWriter(architectureClassPath))
|
||||
// {
|
||||
//
|
||||
// string architectureTemplate = Resources.Load<TextAsset>("ArchitectureTemplate").text;
|
||||
// architectureTemplate = architectureTemplate.Replace("XXXX", architectureClassName);
|
||||
// await writer.WriteAsync(architectureTemplate);
|
||||
// }
|
||||
//模块化脚本生成配置
|
||||
string domainClassName = $"{domain}Domain";
|
||||
string architectureClassName = $"{domain}Architecture";
|
||||
|
||||
//模块配置资源
|
||||
DomainConfig moduleConfig = CreateInstance<DomainConfig>();
|
||||
moduleConfig.domain = domain;
|
||||
moduleConfig.className = domainClassName;
|
||||
moduleConfig.mainPrefab = "Prefabs_" + gameObj.name;
|
||||
moduleConfig.@namespace = domain;
|
||||
AssetDatabase.CreateAsset(moduleConfig, $"Assets/Domain/{domain}/AddressableRes/Config/DomainConfig.asset");
|
||||
//
|
||||
//模块服务器配置资源
|
||||
|
||||
HotfixMainResDomain hotfixMainResDomain = CreateInstance<HotfixMainResDomain>();
|
||||
hotfixMainResDomain.hotfixMainResDomainEntity = new HotfixMainResDomainEntity();
|
||||
hotfixMainResDomain.hotfixMainResDomainEntity.domain = domain;
|
||||
AssetDatabase.CreateAsset(hotfixMainResDomain, $"Assets/Domain/{domain}/Conf/HotfixMainResDomain.asset");
|
||||
|
||||
//编辑器配置资源
|
||||
BuildAssetDataSetting buildAssetDataSetting = CreateInstance<BuildAssetDataSetting>();
|
||||
buildAssetDataSetting.packageName = domain;
|
||||
AssetDatabase.CreateAsset(buildAssetDataSetting,
|
||||
$"Assets/Domain/{domain}/Conf/BuildAssetDataSetting.asset");
|
||||
|
||||
AssetDatabase.Refresh();
|
||||
|
||||
|
||||
string configPath = $"Assets/Domain/{domain}/HotUpdate/{hotfixDomain}.asmdef";
|
||||
AssemblyDefinitionAsset assemblyDefinitionAsset =
|
||||
AssetDatabase.LoadAssetAtPath<AssemblyDefinitionAsset>(configPath);
|
||||
// 将程序集定义添加到 HybridCLR 热更列表
|
||||
var settings = SettingsUtil.HybridCLRSettings;
|
||||
if (!settings.hotUpdateAssemblyDefinitions.Contains(assemblyDefinitionAsset))
|
||||
{
|
||||
var assemblyList = settings.hotUpdateAssemblyDefinitions.ToList();
|
||||
assemblyList.Add(assemblyDefinitionAsset);
|
||||
SettingsUtil.HybridCLRSettings.hotUpdateAssemblyDefinitions = assemblyList.ToArray();
|
||||
|
||||
}
|
||||
|
||||
|
||||
List<AssemblyDefinitionAsset> assemblies = new List<AssemblyDefinitionAsset>();
|
||||
for (int i = 0; i < settings.hotUpdateAssemblyDefinitions.Length; i++)
|
||||
{
|
||||
if (settings.hotUpdateAssemblyDefinitions[i] != null)
|
||||
{
|
||||
assemblies.Add(settings.hotUpdateAssemblyDefinitions[i]);
|
||||
}
|
||||
}
|
||||
|
||||
HybridCLRSettings.Instance.hotUpdateAssemblyDefinitions = assemblies.ToArray();
|
||||
HybridCLRSettings.Save();
|
||||
|
||||
AssetDatabase.SaveAssets();
|
||||
|
||||
|
||||
string domainClassPath = $"{scriptsPath}/{domainClassName}.cs";
|
||||
//await File.WriteAllTextAsync($"{scriptsPath}/{domainClassName}.cs", domainTemplate);
|
||||
await using (var writer = new StreamWriter(domainClassPath))
|
||||
{
|
||||
string domainTemplate = Resources.Load<TextAsset>("DomainTemplate").text;
|
||||
domainTemplate = domainTemplate.Replace("ClassNameXX", domainClassName)
|
||||
.Replace("ReturnArchitecture", architectureClassName)
|
||||
.Replace("ArchitectureX", architectureClassName)
|
||||
.Replace("NamespaceX", domain);
|
||||
await writer.WriteAsync(domainTemplate);
|
||||
}
|
||||
}
|
||||
|
||||
public void CreateDomainClass()
|
||||
{
|
||||
}
|
||||
|
||||
public void CreateArchitectureClass()
|
||||
{
|
||||
}
|
||||
|
||||
[TitleGroup("预览Domain作用域")] public List<CreatDomainEntity> domainList;
|
||||
|
||||
protected override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
domainList = GetCreatDomainAll();
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取全部作用域
|
||||
/// </summary>
|
||||
public static string[] GetCreatDomainAllName()
|
||||
{
|
||||
string domainPath = $"{Application.dataPath}/Domain";
|
||||
string[] domains;
|
||||
// 新增目录获取代码
|
||||
if (Directory.Exists(domainPath))
|
||||
{
|
||||
var dirInfo = new DirectoryInfo(domainPath);
|
||||
// 获取直接子目录(不递归)
|
||||
domains = dirInfo.GetDirectories("*", SearchOption.TopDirectoryOnly)
|
||||
.Select(d => d.Name)
|
||||
.ToArray();
|
||||
}
|
||||
else
|
||||
{
|
||||
domains = Array.Empty<string>();
|
||||
}
|
||||
|
||||
|
||||
|
||||
return domains;
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取全部作用域
|
||||
/// </summary>
|
||||
public static List<CreatDomainEntity> GetCreatDomainAll()
|
||||
{
|
||||
string domainPath = $"{Application.dataPath}/Domain";
|
||||
string[] domains;
|
||||
// 新增目录获取代码
|
||||
if (Directory.Exists(domainPath))
|
||||
{
|
||||
var dirInfo = new DirectoryInfo(domainPath);
|
||||
// 获取直接子目录(不递归)
|
||||
domains = dirInfo.GetDirectories("*", SearchOption.TopDirectoryOnly)
|
||||
.Select(d => d.Name)
|
||||
.ToArray();
|
||||
}
|
||||
else
|
||||
{
|
||||
domains = Array.Empty<string>();
|
||||
}
|
||||
|
||||
List<CreatDomainEntity> domainList = new List<CreatDomainEntity>();
|
||||
foreach (var item in domains)
|
||||
{
|
||||
if (File.Exists($"{domainPath}/{item}/AddressableRes/Config/DomainConfig.asset"))
|
||||
{
|
||||
CreatDomainEntity domainEntity = new CreatDomainEntity(domainList)
|
||||
{
|
||||
DomainName = item,
|
||||
domainPath = $"{domainPath}/{item}"
|
||||
};
|
||||
domainList.Add(domainEntity);
|
||||
}
|
||||
}
|
||||
|
||||
return domainList;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7d162e11fd4c47ee9f6995ad7bb6bac1
|
||||
timeCreated: 1742377890
|
||||
3
Assets/00.StaryEvo/Editor/BuildAsset/Entity.meta
Normal file
3
Assets/00.StaryEvo/Editor/BuildAsset/Entity.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7380165adc3342dbacef4abe80ac2bb7
|
||||
timeCreated: 1742867444
|
||||
@@ -0,0 +1,39 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using EditorFramework;
|
||||
using Sirenix.OdinInspector;
|
||||
using UnityEditor;
|
||||
|
||||
namespace Stary.Evo.Editor
|
||||
{
|
||||
[Serializable]
|
||||
public class CreatDomainEntity
|
||||
{
|
||||
private List<CreatDomainEntity> domainList;
|
||||
|
||||
[HorizontalGroup] [ReadOnly] public string DomainName;
|
||||
[ReadOnly]
|
||||
public string domainPath;
|
||||
|
||||
|
||||
public CreatDomainEntity(List<CreatDomainEntity> domainList)
|
||||
{
|
||||
this.domainList = domainList;
|
||||
}
|
||||
[HorizontalGroup(Width = 60)]
|
||||
[Button("", Icon = SdfIconType.XCircle, IconAlignment = IconAlignment.RightEdge)]
|
||||
public void CloseDomain()
|
||||
{
|
||||
bool isOk = EditorUtility.DisplayDialog("提示", "是否删除此Domain", "是", "否");
|
||||
if (isOk)
|
||||
{
|
||||
BuildAssetWindow.RemoveBuildAssetWindow();
|
||||
EditorFrameworkUtils.DeleteAllChild(domainPath, FileAttributes.Normal);
|
||||
domainList.Clear();
|
||||
AssetDatabase.Refresh();
|
||||
AssetDatabase.SaveAssets();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b99d72d55efd48e099adf77d4608689d
|
||||
timeCreated: 1742867433
|
||||
142
Assets/00.StaryEvo/Editor/BuildAsset/IBuildPipelineViewer.cs
Normal file
142
Assets/00.StaryEvo/Editor/BuildAsset/IBuildPipelineViewer.cs
Normal file
@@ -0,0 +1,142 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Sirenix.OdinInspector;
|
||||
using Stary.Evo.Editor;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using YooAsset;
|
||||
using YooAsset.Editor;
|
||||
|
||||
namespace Stary.Evo.Editor
|
||||
{
|
||||
[Serializable]
|
||||
public class AbstractBuildPipelineViewer
|
||||
{
|
||||
protected BuildAssetDataSetting dataSetting;
|
||||
|
||||
protected bool isSimulate;
|
||||
protected bool isRaw;
|
||||
|
||||
[Title("清理构建缓存", titleAlignment: TitleAlignments.Centered)]
|
||||
[HorizontalGroup("BuildCache")]
|
||||
[InfoBox("当不勾选此项的时候,引擎会开启增量打包模式,会极大提高构建速度!")]
|
||||
[OnValueChanged("SetBuildCacheToggle")]
|
||||
[HideIf("isSimulate", true)]
|
||||
public bool clearBuildCacheToggle;
|
||||
|
||||
[Title("依赖数据库", titleAlignment: TitleAlignments.Centered)]
|
||||
[HorizontalGroup("BuildCache")]
|
||||
[InfoBox("当开启此项的时候,会极大提高构建速度!")]
|
||||
[OnValueChanged("SetUseAssetDependencyDB")]
|
||||
[HideIf("isSimulate", true)]
|
||||
public bool useAssetDependencyDBToggle;
|
||||
|
||||
[Title("资源包的压缩方式", titleAlignment: TitleAlignments.Centered)]
|
||||
[HorizontalGroup("FileStyle"), HideLabel]
|
||||
[OnValueChanged("SetCompression")]
|
||||
[HideIf("@isSimulate==true || isRaw==true")]
|
||||
public ECompressOption compression;
|
||||
|
||||
[Title("资源包文件名称样式", titleAlignment: TitleAlignments.Centered)]
|
||||
[HorizontalGroup("FileStyle"), HideLabel]
|
||||
[OnValueChanged("SetFileNameStyle")]
|
||||
[HideIf("isSimulate", true)]
|
||||
public EFileNameStyle fileNameStyle;
|
||||
|
||||
[Title("首包资源文件的拷贝方式", titleAlignment: TitleAlignments.Centered)]
|
||||
[HorizontalGroup("FileStyle"), HideLabel]
|
||||
[OnValueChanged("SetCopyBuildinFileOption")]
|
||||
[HideIf("isSimulate", true)]
|
||||
public EBuildinFileCopyOption copyBuildinFileOption;
|
||||
|
||||
[Title("首包资源文件的拷贝参数", titleAlignment: TitleAlignments.Centered)]
|
||||
[HideLabel]
|
||||
[OnValueChanged("SetCopyBuildinFileParams")]
|
||||
[ShowIf(
|
||||
"@copyBuildinFileOption==EBuildinFileCopyOption.ClearAndCopyByTags||copyBuildinFileOption==EBuildinFileCopyOption.OnlyCopyByTags ")]
|
||||
public string copyBuildinFileParams;
|
||||
|
||||
public AbstractBuildPipelineViewer(BuildAssetDataSetting dataSetting)
|
||||
{
|
||||
this.dataSetting = dataSetting;
|
||||
useAssetDependencyDBToggle = true;
|
||||
clearBuildCacheToggle = false;
|
||||
compression = ECompressOption.LZ4;
|
||||
fileNameStyle = EFileNameStyle.BundleName;
|
||||
copyBuildinFileOption = EBuildinFileCopyOption.ClearAndCopyAll;
|
||||
}
|
||||
|
||||
#region AssetBuild
|
||||
|
||||
private void SetCompression()
|
||||
{
|
||||
AssetBundleBuilderSetting.SetPackageCompressOption(dataSetting.packageName, dataSetting.selectedBuildPipelines,
|
||||
compression);
|
||||
}
|
||||
|
||||
private void SetFileNameStyle()
|
||||
{
|
||||
|
||||
AssetBundleBuilderSetting.SetPackageFileNameStyle(dataSetting.packageName, dataSetting.selectedBuildPipelines,
|
||||
fileNameStyle);
|
||||
}
|
||||
|
||||
private void SetCopyBuildinFileOption()
|
||||
{
|
||||
|
||||
AssetBundleBuilderSetting.SetPackageBuildinFileCopyOption(dataSetting.packageName,
|
||||
dataSetting.selectedBuildPipelines, copyBuildinFileOption);
|
||||
|
||||
//PlayerPrefs.SetInt("CopyBuildinFileOption", (int)copyBuildinFileOption);
|
||||
}
|
||||
|
||||
private void SetCopyBuildinFileParams()
|
||||
{
|
||||
|
||||
AssetBundleBuilderSetting.SetPackageBuildinFileCopyParams(dataSetting.packageName,
|
||||
dataSetting.selectedBuildPipelines, copyBuildinFileParams);
|
||||
//PlayerPrefs.SetInt("CopyBuildinFileOption", (int)copyBuildinFileOption);
|
||||
}
|
||||
|
||||
public void SetBuildCacheToggle()
|
||||
{
|
||||
AssetBundleBuilderSetting.SetPackageClearBuildCache(dataSetting.packageName, dataSetting.selectedBuildPipelines,
|
||||
clearBuildCacheToggle);
|
||||
}
|
||||
|
||||
private void SetUseAssetDependencyDB()
|
||||
{
|
||||
|
||||
AssetBundleBuilderSetting.SetPackageUseAssetDependencyDB(dataSetting.packageName, dataSetting.selectedBuildPipelines,
|
||||
useAssetDependencyDBToggle);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
public virtual void ExecuteBuild()
|
||||
{
|
||||
// GetPackageVersion();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 创建加密类实例
|
||||
/// </summary>
|
||||
protected IEncryptionServices CreateEncryptionInstance()
|
||||
{
|
||||
var encyptionClassName =
|
||||
AssetBundleBuilderSetting.GetPackageEncyptionClassName(dataSetting.packageName,
|
||||
dataSetting.selectedBuildPipelines);
|
||||
var encryptionClassTypes = EditorTools.GetAssignableTypes(typeof(IEncryptionServices));
|
||||
var classType = encryptionClassTypes.Find(x => x.FullName.Equals(encyptionClassName));
|
||||
if (classType != null)
|
||||
return (IEncryptionServices)Activator.CreateInstance(classType);
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7fdaadaf963047a098c8b4f46fec5619
|
||||
timeCreated: 1741835014
|
||||
@@ -0,0 +1,48 @@
|
||||
using System;
|
||||
using UnityEditor;
|
||||
using YooAsset;
|
||||
using YooAsset.Editor;
|
||||
|
||||
namespace Stary.Evo.Editor
|
||||
{
|
||||
[Serializable]
|
||||
public class RawfileBuildpipelineViewer:AbstractBuildPipelineViewer
|
||||
{
|
||||
public RawfileBuildpipelineViewer(BuildAssetDataSetting packageName) : base(packageName)
|
||||
{
|
||||
isRaw = true;
|
||||
}
|
||||
|
||||
|
||||
public override void ExecuteBuild()
|
||||
{
|
||||
var fileNameStyle = AssetBundleBuilderSetting.GetPackageFileNameStyle(dataSetting.packageName, dataSetting.selectedBuildPipelines);
|
||||
var buildinFileCopyOption = AssetBundleBuilderSetting.GetPackageBuildinFileCopyOption(dataSetting.packageName, dataSetting.selectedBuildPipelines);
|
||||
var buildinFileCopyParams = AssetBundleBuilderSetting.GetPackageBuildinFileCopyParams(dataSetting.packageName, dataSetting.selectedBuildPipelines);
|
||||
var clearBuildCache = AssetBundleBuilderSetting.GetPackageClearBuildCache(dataSetting.packageName, dataSetting.selectedBuildPipelines);
|
||||
var useAssetDependencyDB = AssetBundleBuilderSetting.GetPackageUseAssetDependencyDB(dataSetting.packageName, dataSetting.selectedBuildPipelines);
|
||||
|
||||
RawFileBuildParameters buildParameters = new RawFileBuildParameters();
|
||||
buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot();
|
||||
buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot();
|
||||
buildParameters.BuildPipeline = dataSetting.selectedBuildPipelines.ToString();
|
||||
buildParameters.BuildBundleType = (int)EBuildBundleType.RawBundle;
|
||||
buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget;
|
||||
buildParameters.PackageName = dataSetting.packageName;
|
||||
buildParameters.PackageVersion =dataSetting.GetBuildPackageVersion();
|
||||
buildParameters.VerifyBuildingResult = true;
|
||||
buildParameters.FileNameStyle = fileNameStyle;
|
||||
buildParameters.BuildinFileCopyOption = buildinFileCopyOption;
|
||||
buildParameters.BuildinFileCopyParams = buildinFileCopyParams;
|
||||
buildParameters.ClearBuildCacheFiles = clearBuildCache;
|
||||
buildParameters.UseAssetDependencyDB = useAssetDependencyDB;
|
||||
buildParameters.EncryptionServices = CreateEncryptionInstance();
|
||||
|
||||
RawFileBuildPipeline pipeline = new RawFileBuildPipeline();
|
||||
var buildResult = pipeline.Run(buildParameters, true);
|
||||
if (buildResult.Success)
|
||||
EditorUtility.RevealInFinder(buildResult.OutputPackageDirectory);
|
||||
base.ExecuteBuild();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 06dda5f218054dee83d2a37d42bb2b9a
|
||||
timeCreated: 1741830326
|
||||
@@ -0,0 +1,62 @@
|
||||
using System;
|
||||
using UnityEditor;
|
||||
using YooAsset;
|
||||
using YooAsset.Editor;
|
||||
|
||||
namespace Stary.Evo.Editor
|
||||
{
|
||||
[Serializable]
|
||||
public class ScriptableBuildPipelineViewer:AbstractBuildPipelineViewer
|
||||
{
|
||||
public ScriptableBuildPipelineViewer(BuildAssetDataSetting packageName) : base(packageName)
|
||||
{
|
||||
}
|
||||
|
||||
public override void ExecuteBuild()
|
||||
{
|
||||
var fileNameStyle = AssetBundleBuilderSetting.GetPackageFileNameStyle(dataSetting.packageName, dataSetting.selectedBuildPipelines);
|
||||
var buildinFileCopyOption = AssetBundleBuilderSetting.GetPackageBuildinFileCopyOption(dataSetting.packageName, dataSetting.selectedBuildPipelines);
|
||||
var buildinFileCopyParams = AssetBundleBuilderSetting.GetPackageBuildinFileCopyParams(dataSetting.packageName, dataSetting.selectedBuildPipelines);
|
||||
var compressOption = AssetBundleBuilderSetting.GetPackageCompressOption(dataSetting.packageName, dataSetting.selectedBuildPipelines);
|
||||
var clearBuildCache = AssetBundleBuilderSetting.GetPackageClearBuildCache(dataSetting.packageName, dataSetting.selectedBuildPipelines);
|
||||
var useAssetDependencyDB = AssetBundleBuilderSetting.GetPackageUseAssetDependencyDB(dataSetting.packageName, dataSetting.selectedBuildPipelines);
|
||||
var builtinShaderBundleName = GetBuiltinShaderBundleName();
|
||||
|
||||
ScriptableBuildParameters buildParameters = new ScriptableBuildParameters();
|
||||
buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot();
|
||||
buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot();
|
||||
buildParameters.BuildPipeline = dataSetting.selectedBuildPipelines.ToString();
|
||||
buildParameters.BuildBundleType = (int)EBuildBundleType.AssetBundle;
|
||||
buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget;
|
||||
buildParameters.PackageName = dataSetting.packageName;
|
||||
buildParameters.PackageVersion = dataSetting.GetBuildPackageVersion();
|
||||
buildParameters.EnableSharePackRule = true;
|
||||
buildParameters.VerifyBuildingResult = true;
|
||||
buildParameters.FileNameStyle = fileNameStyle;
|
||||
buildParameters.BuildinFileCopyOption = buildinFileCopyOption;
|
||||
buildParameters.BuildinFileCopyParams = buildinFileCopyParams;
|
||||
buildParameters.CompressOption = compressOption;
|
||||
buildParameters.ClearBuildCacheFiles = clearBuildCache;
|
||||
buildParameters.UseAssetDependencyDB = useAssetDependencyDB;
|
||||
buildParameters.BuiltinShadersBundleName = builtinShaderBundleName;
|
||||
buildParameters.EncryptionServices = CreateEncryptionInstance();
|
||||
|
||||
ScriptableBuildPipeline pipeline = new ScriptableBuildPipeline();
|
||||
var buildResult = pipeline.Run(buildParameters, true);
|
||||
if (buildResult.Success)
|
||||
EditorUtility.RevealInFinder(buildResult.OutputPackageDirectory);
|
||||
base.ExecuteBuild();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 内置着色器资源包名称
|
||||
/// 注意:和自动收集的着色器资源包名保持一致!
|
||||
/// </summary>
|
||||
private string GetBuiltinShaderBundleName()
|
||||
{
|
||||
var uniqueBundleName = AssetBundleCollectorSettingData.Setting.UniqueBundleName;
|
||||
var packRuleResult = DefaultPackRule.CreateShadersPackRuleResult();
|
||||
return packRuleResult.GetBundleName(dataSetting.packageName, uniqueBundleName);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cb4c30ccb8294c92a7545fc05377d7bc
|
||||
timeCreated: 1741830341
|
||||
@@ -0,0 +1,42 @@
|
||||
using System;
|
||||
using UnityEditor;
|
||||
using YooAsset;
|
||||
using YooAsset.Editor;
|
||||
|
||||
namespace Stary.Evo.Editor
|
||||
{
|
||||
[Serializable]
|
||||
public class SimulateBuildPipelineViewer:AbstractBuildPipelineViewer
|
||||
{
|
||||
public SimulateBuildPipelineViewer(BuildAssetDataSetting packageName) : base(packageName)
|
||||
{
|
||||
isSimulate = true;
|
||||
}
|
||||
|
||||
public override void ExecuteBuild()
|
||||
{
|
||||
var fileNameStyle = AssetBundleBuilderSetting.GetPackageFileNameStyle(dataSetting.packageName, dataSetting.selectedBuildPipelines);
|
||||
var buildinFileCopyOption = AssetBundleBuilderSetting.GetPackageBuildinFileCopyOption(dataSetting.packageName, dataSetting.selectedBuildPipelines);
|
||||
var buildinFileCopyParams = AssetBundleBuilderSetting.GetPackageBuildinFileCopyParams(dataSetting.packageName, dataSetting.selectedBuildPipelines);
|
||||
|
||||
EditorSimulateBuildParameters buildParameters = new EditorSimulateBuildParameters();
|
||||
buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot();
|
||||
buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot();
|
||||
buildParameters.BuildPipeline = dataSetting.selectedBuildPipelines.ToString();
|
||||
buildParameters.BuildBundleType = (int)EBuildBundleType.VirtualBundle;
|
||||
buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget;
|
||||
buildParameters.PackageName = dataSetting.packageName;
|
||||
buildParameters.PackageVersion = dataSetting.GetBuildPackageVersion();
|
||||
buildParameters.VerifyBuildingResult = true;
|
||||
buildParameters.FileNameStyle = fileNameStyle;
|
||||
buildParameters.BuildinFileCopyOption = buildinFileCopyOption;
|
||||
buildParameters.BuildinFileCopyParams = buildinFileCopyParams;
|
||||
buildParameters.EncryptionServices = CreateEncryptionInstance();
|
||||
|
||||
EditorSimulateBuildPipeline pipeline = new EditorSimulateBuildPipeline();
|
||||
var buildResult = pipeline.Run(buildParameters, true);
|
||||
if (buildResult.Success)
|
||||
EditorUtility.RevealInFinder(buildResult.OutputPackageDirectory);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 501ea11982da4673b0bf8af90a805329
|
||||
timeCreated: 1741830160
|
||||
Reference in New Issue
Block a user