【m】框架大更新
This commit is contained in:
@@ -0,0 +1,238 @@
|
||||
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<EBuildPipeline, AbstractBuildPipelineViewer> _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();
|
||||
}
|
||||
|
||||
/// <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];
|
||||
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,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 39a67460f559484da2b52def8ff05571
|
||||
timeCreated: 1741844184
|
||||
@@ -0,0 +1,54 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public void SetButtonName(string ButtonName)
|
||||
{
|
||||
this.ButtonName = ButtonName;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 689d3c7b06e841668647fc00ff0a3dd8
|
||||
timeCreated: 1741593629
|
||||
563
Assets/00.StaryEvoTools/Editor/BuildAsset/BuildAssetWindow.cs
Normal file
563
Assets/00.StaryEvoTools/Editor/BuildAsset/BuildAssetWindow.cs
Normal file
@@ -0,0 +1,563 @@
|
||||
/****************************************************
|
||||
文件:BuildAssetWindow.cs
|
||||
作者:xosmo_
|
||||
邮箱:
|
||||
日期:2025/3/10 10:43:20
|
||||
功能:
|
||||
*****************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.IO.Compression;
|
||||
using System.Threading.Tasks;
|
||||
#if HotUpdate
|
||||
using HybridCLR.Editor;
|
||||
using HybridCLR.Editor.Commands;
|
||||
#endif
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Sirenix.OdinInspector;
|
||||
using Sirenix.OdinInspector.Editor;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using YooAsset;
|
||||
using YooAsset.Editor;
|
||||
|
||||
namespace Stary.Evo.Editor
|
||||
{
|
||||
public class BuildAssetWindow : OdinEditorWindow
|
||||
{
|
||||
public static OdinEditorWindow window;
|
||||
private HotfixMainResDomain hotfixMainResDomain;
|
||||
|
||||
[MenuItem("Evo/Dev/资源打包工具",false, 2)]
|
||||
static void ShowWindows()
|
||||
{
|
||||
#if NotUpdate
|
||||
if (EditorUtility.DisplayDialog("提示", "当前为非热更模式,不支持热更打包功能,是否切换热更模式", "是", "否"))
|
||||
{
|
||||
ChangeHotUpdateSchema.SetHotUpdateMode(HotUpdateMode.HotUpdate);
|
||||
}
|
||||
|
||||
#elif HotUpdate
|
||||
if (CreatAssetWindow.GetCreatDomainAll().Count <= 0)
|
||||
{
|
||||
EditorUtility.DisplayDialog("提示", "不存在Domain元素,无法打开此面板,请先创建Domain元素", "确定");
|
||||
return;
|
||||
}
|
||||
|
||||
window = (BuildAssetWindow)EditorWindow.GetWindow(typeof(BuildAssetWindow));
|
||||
window.Show();
|
||||
#endif
|
||||
}
|
||||
|
||||
protected override void OnDisable()
|
||||
{
|
||||
base.OnDisable();
|
||||
EditorUtility.ClearProgressBar();
|
||||
}
|
||||
|
||||
protected override async void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
//初始化读取资源配置表
|
||||
hotfixMainResDomain = Resources.Load<HotfixMainResDomain>("HotfixMainResDomain");
|
||||
if (hotfixMainResDomain == null)
|
||||
{
|
||||
Debug.LogError($"UnityEvo:读取资源配置表失败【HotfixMainResDomain】...表在Resources下不存在,请创建");
|
||||
}
|
||||
else
|
||||
{
|
||||
ip = hotfixMainResDomain.hotfixMainResDomainEntity.ipconfig;
|
||||
EditorPrefs.SetString("ip",ip);
|
||||
userName = hotfixMainResDomain.hotfixMainResDomainEntity.username;
|
||||
password = hotfixMainResDomain.hotfixMainResDomainEntity.password;
|
||||
}
|
||||
GetBuildPackageNames();
|
||||
if (string.IsNullOrEmpty(ip))
|
||||
{
|
||||
buildAssetType = BuildAssetType.Login;
|
||||
return;
|
||||
}
|
||||
|
||||
bool isValidateToken = await WebRequestSystem.GetValidateToken(ip + "/Authentication/validateToken");
|
||||
if (isValidateToken)
|
||||
{
|
||||
buildAssetType = BuildAssetType.Build;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
buildAssetType = BuildAssetType.Login;
|
||||
}
|
||||
|
||||
public static void RemoveBuildAssetWindow()
|
||||
{
|
||||
if (window != null)
|
||||
window.Close();
|
||||
}
|
||||
|
||||
[EnumToggleButtons, HideLabel] public BuildAssetType buildAssetType;
|
||||
|
||||
#region BuildAssetLogin
|
||||
|
||||
[ShowIf("@ buildAssetType== BuildAssetType.Login")]
|
||||
[BoxGroup("Login", showLabel: false)]
|
||||
[OnValueChanged("SetWebRequestInfo")]
|
||||
public string ip, userName, password;
|
||||
|
||||
[ShowIf("@ buildAssetType== BuildAssetType.Login")]
|
||||
[BoxGroup("Login", showLabel: false)]
|
||||
[Button("登录", ButtonSizes.Large)]
|
||||
[InfoBox("@ message", InfoMessageType.Info)]
|
||||
public async void LoginButton()
|
||||
{
|
||||
string url = ip + "/Authentication/login";
|
||||
EditorUtility.DisplayProgressBar("提示", $"登陆中~", 0f);
|
||||
bool islogin = await WebRequestSystem.Login(url, userName, password);
|
||||
float progress = 0f;
|
||||
while (progress >= 1f)
|
||||
{
|
||||
progress += 0.1f;
|
||||
EditorUtility.DisplayProgressBar("提示", $"登陆中~", progress);
|
||||
await Task.Delay(TimeSpan.FromSeconds(0.2f));
|
||||
}
|
||||
|
||||
EditorUtility.ClearProgressBar();
|
||||
UpdateMessage(islogin);
|
||||
}
|
||||
|
||||
private void SetWebRequestInfo()
|
||||
{
|
||||
if (hotfixMainResDomain != null)
|
||||
{
|
||||
hotfixMainResDomain.hotfixMainResDomainEntity.ipconfig = ip;
|
||||
hotfixMainResDomain.hotfixMainResDomainEntity.username = userName;
|
||||
hotfixMainResDomain.hotfixMainResDomainEntity.password = password;
|
||||
EditorPrefs.SetString("ip",ip);
|
||||
EditorUtility.SetDirty(hotfixMainResDomain);
|
||||
AssetDatabase.SaveAssets();
|
||||
}
|
||||
}
|
||||
|
||||
private string message;
|
||||
|
||||
public void UpdateMessage(bool islogin)
|
||||
{
|
||||
message = "当前登录状态为:" + islogin;
|
||||
if (islogin)
|
||||
{
|
||||
buildAssetType = BuildAssetType.Build;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
protected void OnSelectionChange()
|
||||
{
|
||||
EditorUtility.SetDirty(BuildAssetDataSetting);
|
||||
AssetDatabase.SaveAssets();
|
||||
//AssetDatabase.Refresh();
|
||||
}
|
||||
|
||||
[BoxGroup("Build", showLabel: false)]
|
||||
[ShowIf("@ buildAssetType== BuildAssetType.Build")]
|
||||
[Title("包裹列表", titleAlignment: TitleAlignments.Centered)]
|
||||
[HorizontalGroup("Build/BuildPipeline"), HideLabel]
|
||||
[ValueDropdown("GetBuildPackageNames")]
|
||||
[OnValueChanged("SetBuildPackageNames")]
|
||||
public string selectedPackageNames;
|
||||
|
||||
[BoxGroup("Build", showLabel: false)]
|
||||
[ShowIf("@ buildAssetType== BuildAssetType.Build")]
|
||||
[Title("当前打包平台", titleAlignment: TitleAlignments.Centered)]
|
||||
[ReadOnly]
|
||||
[HorizontalGroup("Build/BuildPipeline"), HideLabel]
|
||||
public string buildTarget;
|
||||
|
||||
private static string packageName;
|
||||
|
||||
#region HyBridCLRBuild
|
||||
|
||||
[BoxGroup("Build", showLabel: false)]
|
||||
[HideIf("@ buildAssetType!= BuildAssetType.Build")]
|
||||
[Title("打包dll(子包仅打一次)", titleAlignment: TitleAlignments.Centered)]
|
||||
[HorizontalGroup("Build/HyBridClrBuildEntity"), HideLabel]
|
||||
public BuildAssetEntity hyBridClrBuildEntity =
|
||||
new BuildAssetEntity("HyBridCLRBuild", "DllBuildTarget", () =>
|
||||
{
|
||||
#if HotUpdate
|
||||
//PrebuildCommand.GenerateAll();
|
||||
CompileDllCommand.CompileDllActiveBuildTarget();
|
||||
#endif
|
||||
});
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region MarkAsset
|
||||
|
||||
[BoxGroup("Build", showLabel: false)]
|
||||
[ShowIf("@ buildAssetType== BuildAssetType.Build")]
|
||||
[Title("标记资源", titleAlignment: TitleAlignments.Centered)]
|
||||
[HorizontalGroup("Build/HyBridClrBuildEntity"), HideLabel]
|
||||
public BuildAssetEntity markAssetEntity =
|
||||
new BuildAssetEntity("MarkAsset", "MarkAsset", MarkAdressable.AddDomainMark);
|
||||
|
||||
#endregion
|
||||
|
||||
#region BuildAsset
|
||||
|
||||
[BoxGroup("Build", showLabel: false)]
|
||||
[ShowIf("@ buildAssetType== BuildAssetType.Build")]
|
||||
[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 = 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;
|
||||
|
||||
|
||||
// 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}");
|
||||
}
|
||||
|
||||
if (selectedPackageNames != packageName)
|
||||
{
|
||||
GetHostBuildPackageVersion(buildAssetDataSetting);
|
||||
}
|
||||
|
||||
packageName = selectedPackageNames;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前包裹
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static string GetBuildPackageName()
|
||||
{
|
||||
return packageName;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Update
|
||||
|
||||
[BoxGroup("Build", showLabel: false)]
|
||||
[ShowIf("@ buildAssetType== BuildAssetType.Build")]
|
||||
[Title("打包本地资源", titleAlignment: TitleAlignments.Centered)]
|
||||
[HideLabel]
|
||||
public BuildAssetEntity onBuildPipelineEntity;
|
||||
|
||||
[BoxGroup("Build", showLabel: false)]
|
||||
[Title("上传资源", titleAlignment: TitleAlignments.Centered)]
|
||||
[HideLabel]
|
||||
[ShowIf(
|
||||
"@ BuildAssetDataSetting.environmentType== EnvironmentType.Release && buildAssetType== BuildAssetType.Build")]
|
||||
public BuildAssetEntity onUpdateBuildPipelineEntity;
|
||||
|
||||
|
||||
private void OnBuildPipeline()
|
||||
{
|
||||
if (EditorUtility.DisplayDialog("提示", $"开始构建资源包[{selectedPackageNames}]!", "Yes", "No"))
|
||||
{
|
||||
EditorTools.ClearUnityConsole();
|
||||
EditorApplication.delayCall += BuildAssetDataSetting.viewer.ExecuteBuild;
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning("[Build] 打包已经取消");
|
||||
}
|
||||
}
|
||||
|
||||
private async void OnUpdateBuildPipeline()
|
||||
{
|
||||
if (EditorUtility.DisplayDialog("提示", $"开始上传至服务器[{selectedPackageNames}]!", "Yes", "No"))
|
||||
{
|
||||
// 新增:打包为zip的逻辑
|
||||
string zipFilePath = BuildZip(BuildAssetDataSetting);
|
||||
await UpdateFileDataResDomain(BuildAssetDataSetting, zipFilePath);
|
||||
await Task.Delay(1000);
|
||||
EditorUtility.ClearProgressBar();
|
||||
}
|
||||
else
|
||||
{
|
||||
EditorUtility.ClearProgressBar();
|
||||
EditorUtility.DisplayDialog("提示", "Update] 上传已经取消", "确定");
|
||||
Debug.LogWarning("[Update] 上传已经取消");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static string BuildZip(BuildAssetDataSetting setting)
|
||||
{
|
||||
EditorUtility.DisplayProgressBar("提示", $"开始上传{setting.packageName}(打包zip)", 0.0f);
|
||||
// 新增:打包为zip的逻辑
|
||||
string zipFileName =
|
||||
$"{setting.packageName}_{setting.packageVersion}.zip";
|
||||
//原yooAsset目录
|
||||
var outputPackageDirectory =
|
||||
$"{AssetBundleBuilderHelper.GetDefaultBuildOutputRoot()}/{EditorUserBuildSettings.activeBuildTarget}/{setting.packageName}";
|
||||
|
||||
//拷贝目录
|
||||
string outFilePath = $"{outputPackageDirectory}/{setting.packageVersion}";
|
||||
|
||||
var copyPackageDirectory =
|
||||
$"{Application.streamingAssetsPath}/{YooAssetSettingsData.GetDefaultYooFolderName()}/{setting.packageName}";
|
||||
//拷贝BuildinCatalog文件
|
||||
CreateBuildinCatalogFile("BuildinCatalog.json", copyPackageDirectory, outFilePath);
|
||||
CreateBuildinCatalogFile("BuildinCatalog.bytes", copyPackageDirectory, outFilePath);
|
||||
|
||||
//输出目录
|
||||
string zipFilePath = Path.Combine(outputPackageDirectory, zipFileName);
|
||||
try
|
||||
{
|
||||
using (FileStream zipStream = new FileStream(zipFilePath, FileMode.Create))
|
||||
using (ZipArchive archive = new ZipArchive(zipStream, ZipArchiveMode.Create))
|
||||
{
|
||||
// 指定需要压缩的后缀(例如:只压缩.json和.dll文件)
|
||||
//string[] targetExtensions = { ".bundle" };
|
||||
|
||||
// 遍历目录下所有文件
|
||||
// foreach (string filePath in Directory.GetFiles(outFilePath, "*.*", SearchOption.AllDirectories)
|
||||
// .Where(f => targetExtensions.Contains(Path.GetExtension(f),
|
||||
// StringComparer.OrdinalIgnoreCase)))
|
||||
foreach (string filePath in Directory.GetFiles(outFilePath, "*.*", SearchOption.AllDirectories))
|
||||
{
|
||||
// 获取文件在压缩包中的相对路径
|
||||
string entryName = Path.GetRelativePath(outFilePath, filePath);
|
||||
|
||||
// 创建zip条目
|
||||
ZipArchiveEntry entry = archive.CreateEntry(entryName,
|
||||
System.IO.Compression.CompressionLevel.Optimal);
|
||||
|
||||
// 写入文件内容
|
||||
using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
|
||||
using (Stream entryStream = entry.Open())
|
||||
{
|
||||
fileStream.CopyTo(entryStream);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Debug.Log($"成功打包为zip:{zipFilePath}");
|
||||
EditorUtility.DisplayProgressBar("提示", $"开始上传{setting.packageName}(打包zip)", 0.25f);
|
||||
return zipFilePath;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError($"打包zip失败:{ex.Message}");
|
||||
EditorUtility.ClearProgressBar();
|
||||
return default;
|
||||
}
|
||||
}
|
||||
|
||||
private static void CreateBuildinCatalogFile(string fileName, string copyPackageDirectory, string outFilePath)
|
||||
{
|
||||
// 假设 BuildinCatalog 文件名为 BuildinCatalog.json
|
||||
|
||||
string sourcePath = Path.Combine(copyPackageDirectory, fileName); // 源文件路径
|
||||
string destinationPath = Path.Combine(outFilePath, fileName); // 目标文件路径
|
||||
|
||||
// 如果目标文件已存在,则覆盖
|
||||
if (File.Exists(destinationPath))
|
||||
{
|
||||
File.Delete(destinationPath);
|
||||
}
|
||||
|
||||
// 执行拷贝操作
|
||||
File.Copy(sourcePath, destinationPath);
|
||||
|
||||
}
|
||||
|
||||
public static async Task UpdateFileDataResDomain(BuildAssetDataSetting setting, string zipFilePath)
|
||||
{
|
||||
//初始化读取资源配置表
|
||||
HotfixMainResDomain hotfixMainResDomain = Resources.Load<HotfixMainResDomain>("HotfixMainResDomain");
|
||||
if (hotfixMainResDomain == null)
|
||||
{
|
||||
Debug.LogError($"UnityEvo:读取资源配置表失败【HotfixMainResDomain】...表不存在");
|
||||
return;
|
||||
}
|
||||
|
||||
var ip = hotfixMainResDomain.hotfixMainResDomainEntity.ipconfig;
|
||||
var messageEntity = await WebRequestSystem.PostFile(ip + "/FileLoad/UpLoadFile", new[] { zipFilePath });
|
||||
EditorUtility.DisplayProgressBar("提示", $"开始上传{setting.packageName}(上传zip文件)", 0.5f);
|
||||
if (messageEntity.code == 200)
|
||||
{
|
||||
List<ResultMessageEntity> resultMessageEntities =
|
||||
JsonConvert.DeserializeObject<List<ResultMessageEntity>>(messageEntity.data.ToString());
|
||||
if (resultMessageEntities.Count > 0)
|
||||
{
|
||||
EditorUtility.DisplayProgressBar("提示", "开始上传(更新数据库)", 0.75f);
|
||||
foreach (var resultMessageEntity in resultMessageEntities)
|
||||
{
|
||||
var data = JsonConvert.DeserializeObject(resultMessageEntity.data.ToString()) as JObject;
|
||||
string fileId = data["id"].ToString();
|
||||
ResDmainAddRequst resDmainAddRequst = new ResDmainAddRequst()
|
||||
{
|
||||
ProductName = Application.identifier,
|
||||
DomainName = setting.packageName,
|
||||
Platform = EditorUserBuildSettings.activeBuildTarget.ToString(),
|
||||
PackageVersion = setting.packageVersion,
|
||||
DocumentFileId = fileId
|
||||
};
|
||||
var resResultMessage = await WebRequestSystem.Post(ip + "/ResDomain/AddResDomain",
|
||||
JsonConvert.SerializeObject(resDmainAddRequst));
|
||||
//如果低于服务器版本,更新版本号
|
||||
if (resResultMessage.code == 1009)
|
||||
{
|
||||
ResDmainVersionResponse dmainVersionResponse =
|
||||
JsonConvert.DeserializeObject<ResDmainVersionResponse>(resResultMessage.data
|
||||
.ToString());
|
||||
string[] versions = dmainVersionResponse.PackageVersion.Split('.');
|
||||
setting.packageVersionX = int.Parse(versions[0]);
|
||||
setting.packageVersionY = int.Parse(versions[1]);
|
||||
setting.packageVersionZ = int.Parse(versions[2]);
|
||||
EditorUtility.DisplayDialog("提示",
|
||||
$"{resResultMessage.message + $"\n{resResultMessage.data.ToString()}"}", "确定");
|
||||
}
|
||||
|
||||
setting.GetBuildPackageVersion(true);
|
||||
}
|
||||
|
||||
EditorUtility.DisplayProgressBar("提示", $"开始上传{setting.packageName}(更新数据库)", 1f);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
EditorUtility.DisplayProgressBar("提示", $"{messageEntity.message}", 1f);
|
||||
}
|
||||
|
||||
await Task.Delay(1000);
|
||||
EditorUtility.ClearProgressBar();
|
||||
return;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取服务器上版本号
|
||||
/// </summary>
|
||||
private async void GetHostBuildPackageVersion(BuildAssetDataSetting setting)
|
||||
{
|
||||
var resDmainAddRequst = new ResDmainRequst()
|
||||
{
|
||||
ProductName = Application.identifier,
|
||||
DomainName = selectedPackageNames,
|
||||
Platform = EditorUserBuildSettings.activeBuildTarget.ToString(),
|
||||
};
|
||||
var resResultMessage = await WebRequestSystem.Post(ip + "/ResDomain/GetResDomainByDomain",
|
||||
JsonConvert.SerializeObject(resDmainAddRequst));
|
||||
//如果低于服务器版本,更新版本号
|
||||
if (resResultMessage.code != 1011)
|
||||
{
|
||||
if (resResultMessage.data != null)
|
||||
{
|
||||
ResDmainResponse domainResponse =
|
||||
JsonConvert.DeserializeObject<ResDmainResponse>(resResultMessage.data
|
||||
.ToString());
|
||||
string[] versions = domainResponse.PackageVersion.Split('.');
|
||||
setting.packageVersionX = int.Parse(versions[0]);
|
||||
setting.packageVersionY = int.Parse(versions[1]);
|
||||
setting.packageVersionZ = int.Parse(versions[2]);
|
||||
setting.GetBuildPackageVersion(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError($"UnityEvo:获取服务器版本失败,resResultMessage.data为空");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
EditorUtility.DisplayDialog("提示",
|
||||
$"{resResultMessage.message},默认1.0.0版本 ", "确定");
|
||||
setting.packageVersionX = 1;
|
||||
setting.packageVersionY = 0;
|
||||
setting.packageVersionZ = 0;
|
||||
setting.GetBuildPackageVersion(false);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
protected void Init()
|
||||
{
|
||||
//Update
|
||||
buildTarget = EditorUserBuildSettings.activeBuildTarget.ToString();
|
||||
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);
|
||||
}
|
||||
GUILayout.EndScrollView();
|
||||
|
||||
UpdateBuildPipelineButtonName();
|
||||
}
|
||||
|
||||
public void UpdateBuildPipelineButtonName()
|
||||
{
|
||||
onBuildPipelineEntity.SetButtonName($"打包资源包【版本:{BuildAssetDataSetting.packageVersion}】");
|
||||
onUpdateBuildPipelineEntity.SetButtonName($"更新至服务器【版本:{BuildAssetDataSetting.packageVersion}】");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 80143df6d596f664f97e7139d7811d2d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,60 @@
|
||||
using System;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using YooAsset;
|
||||
using YooAsset.Editor;
|
||||
|
||||
namespace Stary.Evo.Editor
|
||||
{
|
||||
[Serializable]
|
||||
public class BuiltinBuildPipelineViewer : AbstractBuildPipelineViewer
|
||||
{
|
||||
public BuiltinBuildPipelineViewer(string packageName, string selectedBuildPipelines, string packageVersion) :
|
||||
base(packageName, selectedBuildPipelines, packageVersion)
|
||||
{
|
||||
// isSimulate = false;
|
||||
}
|
||||
|
||||
public override void ExecuteBuild()
|
||||
{
|
||||
var fileNameStyle = AssetBundleBuilderSetting.GetPackageFileNameStyle(packageName, selectedBuildPipelines);
|
||||
var buildinFileCopyOption =
|
||||
AssetBundleBuilderSetting.GetPackageBuildinFileCopyOption(packageName, selectedBuildPipelines);
|
||||
var buildinFileCopyParams =
|
||||
AssetBundleBuilderSetting.GetPackageBuildinFileCopyParams(packageName, selectedBuildPipelines);
|
||||
var compressOption =
|
||||
AssetBundleBuilderSetting.GetPackageCompressOption(packageName, selectedBuildPipelines);
|
||||
var clearBuildCache =
|
||||
AssetBundleBuilderSetting.GetPackageClearBuildCache(packageName, selectedBuildPipelines);
|
||||
var useAssetDependencyDB =
|
||||
AssetBundleBuilderSetting.GetPackageUseAssetDependencyDB(packageName, selectedBuildPipelines);
|
||||
|
||||
BuiltinBuildParameters buildParameters = new BuiltinBuildParameters();
|
||||
buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot();
|
||||
buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot();
|
||||
buildParameters.BuildPipeline = selectedBuildPipelines.ToString();
|
||||
buildParameters.BuildBundleType = (int)EBuildBundleType.AssetBundle;
|
||||
buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget;
|
||||
buildParameters.PackageName = packageName;
|
||||
buildParameters.PackageVersion = packageVersion;
|
||||
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)
|
||||
{
|
||||
Debug.Log($"Build Success! 【{buildResult.OutputPackageDirectory}】");
|
||||
//EditorUtility.RevealInFinder(buildResult.OutputPackageDirectory);
|
||||
base.ExecuteBuild();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ac3d61d6f0744f02a2f038fdeed98b75
|
||||
timeCreated: 1741830306
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7dfc7b6280e2426a81a5ead99db006f7
|
||||
timeCreated: 1741232911
|
||||
@@ -0,0 +1,78 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Stary.Evo.Editor
|
||||
{
|
||||
public class ChangeHotUpdateSchema
|
||||
{
|
||||
public static HotUpdateMode HotUpdateMode
|
||||
{
|
||||
get => _hotUpdate;
|
||||
set => SetHotUpdateMode(value);
|
||||
}
|
||||
|
||||
private static HotUpdateMode _hotUpdate;
|
||||
|
||||
private const string EditorNotUpdateMode = "Evo/Schema/ChangeHotUpdate/NOTUPDARE(非热更模式)";
|
||||
private const string EditorHotUpdateMode = "Evo/Schema/ChangeHotUpdate/HOTUPDATE(热更模式)";
|
||||
|
||||
[MenuItem(EditorNotUpdateMode)]
|
||||
private static void SetNotUpdateMode() => SetHotUpdateMode(HotUpdateMode.NotUpdate);
|
||||
|
||||
[MenuItem(EditorHotUpdateMode)]
|
||||
private static void SetHotUpdateMode() => SetHotUpdateMode(HotUpdateMode.HotUpdate);
|
||||
|
||||
// [MenuItem(WebPlayMode)]
|
||||
// private static void SetWebMode() => SetPlayerMode(HotUpdateMode.WEB_PLAYMODE);
|
||||
|
||||
[MenuItem(EditorNotUpdateMode, true)]
|
||||
private static bool ValidateModeMenu()
|
||||
{
|
||||
string platform = EditorPrefs.GetString("ChangeHotUpdateSchema");
|
||||
Menu.SetChecked(EditorNotUpdateMode, platform == HotUpdateMode.NotUpdate.ToString());
|
||||
Menu.SetChecked(EditorHotUpdateMode, platform == HotUpdateMode.HotUpdate.ToString());
|
||||
//Menu.SetChecked(WebPlayMode, platform == HotUpdateMode.WEB_PLAYMODE.ToString());
|
||||
Debug.LogError("ChangeHotUpdateSchema");
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void SetHotUpdateMode(HotUpdateMode mode)
|
||||
{
|
||||
// 清除所有旧模式定义
|
||||
var currentTarget = EditorUserBuildSettings.selectedBuildTargetGroup;
|
||||
if (currentTarget == BuildTargetGroup.Unknown) return;
|
||||
|
||||
var defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(currentTarget)
|
||||
.Split(';')
|
||||
.Where(d => !Enum.GetNames(typeof(HotUpdateMode)).Contains(d))
|
||||
.ToList();
|
||||
|
||||
// 添加新模式
|
||||
defines.Add(mode.ToString());
|
||||
PlayerSettings.SetScriptingDefineSymbolsForGroup(currentTarget, string.Join(";", defines));
|
||||
Debug.Log($"当前编译符号: {string.Join(";", defines)}"); // 添加调试日志
|
||||
_hotUpdate = mode;
|
||||
EditorPrefs.SetString("ChangeHotUpdateSchema", _hotUpdate.ToString());
|
||||
|
||||
ValidateModeMenu();
|
||||
AssetDatabase.Refresh();
|
||||
// 添加解决方案文件重新生成逻辑
|
||||
EditorApplication.delayCall += () =>
|
||||
{
|
||||
EditorApplication.ExecuteMenuItem("Assets/Open C# Project");
|
||||
UnityEditor.Compilation.CompilationPipeline.RequestScriptCompilation();
|
||||
Debug.Log("已强制重新生成解决方案文件");
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public enum HotUpdateMode
|
||||
{
|
||||
//非热更模式,
|
||||
NotUpdate,
|
||||
//热更模式
|
||||
HotUpdate,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7d18419d2d9c488687f9aff50cbd8357
|
||||
timeCreated: 1751423025
|
||||
@@ -0,0 +1,90 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Stary.Evo.Editor
|
||||
{
|
||||
public class ChangePlayerSchema
|
||||
{
|
||||
public static PLayerMode PLayerMode
|
||||
{
|
||||
get => _pLayerMode;
|
||||
set => SetPlayerMode(value);
|
||||
}
|
||||
|
||||
private static PLayerMode _pLayerMode;
|
||||
|
||||
private const string EditorSimulateMode = "Evo/Schema/ChangePlayer/EditorSimulateMode(编辑器调试模式)";
|
||||
private const string OfflinePlayMode = "Evo/Schema/ChangePlayer/OfflinePlayMode(本地运行模式)";
|
||||
private const string HostPlayMode = "Evo/Schema/ChangePlayer/HostPlayMode(服务器运行模式)";
|
||||
private const string WebPlayMode = "Evo/Schema/ChangePlayer/WebPlayMode(Web运行模式)";
|
||||
|
||||
[MenuItem(EditorSimulateMode)]
|
||||
private static void SetEditorMode() => SetPlayerMode(PLayerMode.EDITOR_SIMULATEMODE);
|
||||
|
||||
[MenuItem(OfflinePlayMode)]
|
||||
private static void SetOfflineMode() => SetPlayerMode(PLayerMode.OFFLINE_PLAYMODE);
|
||||
|
||||
[MenuItem(HostPlayMode)]
|
||||
private static void SetHostMode() => SetPlayerMode(PLayerMode.HOST_PLAYMODE);
|
||||
|
||||
// [MenuItem(WebPlayMode)]
|
||||
// private static void SetWebMode() => SetPlayerMode(PLayerMode.WEB_PLAYMODE);
|
||||
|
||||
[MenuItem(EditorSimulateMode, true)]
|
||||
private static bool ValidateModeMenu()
|
||||
{
|
||||
string platform = EditorPrefs.GetString("ChangePlayerSchema");
|
||||
Menu.SetChecked(EditorSimulateMode, platform == PLayerMode.EDITOR_SIMULATEMODE.ToString());
|
||||
Menu.SetChecked(OfflinePlayMode, platform == PLayerMode.OFFLINE_PLAYMODE.ToString());
|
||||
Menu.SetChecked(HostPlayMode, platform == PLayerMode.HOST_PLAYMODE.ToString());
|
||||
//Menu.SetChecked(WebPlayMode, platform == PLayerMode.WEB_PLAYMODE.ToString());
|
||||
Debug.LogError("CheckPlatform");
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void SetPlayerMode(PLayerMode mode)
|
||||
{
|
||||
// 清除所有旧模式定义
|
||||
var currentTarget = EditorUserBuildSettings.selectedBuildTargetGroup;
|
||||
if (currentTarget == BuildTargetGroup.Unknown) return;
|
||||
|
||||
var defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(currentTarget)
|
||||
.Split(';')
|
||||
.Where(d => !Enum.GetNames(typeof(PLayerMode)).Contains(d))
|
||||
.ToList();
|
||||
|
||||
// 添加新模式
|
||||
defines.Add(mode.ToString());
|
||||
PlayerSettings.SetScriptingDefineSymbolsForGroup(currentTarget, string.Join(";", defines));
|
||||
Debug.Log($"当前编译符号: {string.Join(";", defines)}"); // 添加调试日志
|
||||
_pLayerMode = mode;
|
||||
EditorPrefs.SetString("ChangePlayerSchema", _pLayerMode.ToString());
|
||||
ValidateModeMenu();
|
||||
AssetDatabase.Refresh();
|
||||
// 添加解决方案文件重新生成逻辑
|
||||
EditorApplication.delayCall += () =>
|
||||
{
|
||||
EditorApplication.ExecuteMenuItem("Assets/Open C# Project");
|
||||
UnityEditor.Compilation.CompilationPipeline.RequestScriptCompilation();
|
||||
Debug.Log("已强制重新生成解决方案文件");
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public enum PLayerMode
|
||||
{
|
||||
//编辑仿真模式,
|
||||
EDITOR_SIMULATEMODE,
|
||||
|
||||
//单机运行模式
|
||||
OFFLINE_PLAYMODE,
|
||||
|
||||
//联机运行模式
|
||||
HOST_PLAYMODE,
|
||||
|
||||
// //web运行模式
|
||||
// WEB_PLAYMODE
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 28520dd6a62c460d93fe8bb524b6a159
|
||||
timeCreated: 1741232924
|
||||
@@ -0,0 +1,78 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Stary.Evo.Editor
|
||||
{
|
||||
public class ChangePointClondMode
|
||||
{
|
||||
public static PointClondMode PointClondMode
|
||||
{
|
||||
get => _pointClondMode;
|
||||
set => SetPoindClondMode(value);
|
||||
}
|
||||
|
||||
private static PointClondMode _pointClondMode;
|
||||
|
||||
private const string EditorNotMode = "Evo/Schema/ChangePointClond/NotPointClond";
|
||||
private const string EditorImmersalMode = "Evo/Schema/ChangePointClond/Immersal";
|
||||
|
||||
[MenuItem(EditorNotMode)]
|
||||
private static void SetNotMode() => SetPoindClondMode(PointClondMode.NotPointClond);
|
||||
|
||||
[MenuItem(EditorImmersalMode)]
|
||||
private static void SetImmersalMode() => SetPoindClondMode(PointClondMode.Immersal);
|
||||
|
||||
// [MenuItem(WebPlayMode)]
|
||||
// private static void SetWebMode() => SetPlayerMode(HotUpdateMode.WEB_PLAYMODE);
|
||||
|
||||
[MenuItem(EditorNotMode, true)]
|
||||
private static bool ValidateModeMenu()
|
||||
{
|
||||
string platform = EditorPrefs.GetString("ChangePoindClondSchema");
|
||||
Menu.SetChecked(EditorNotMode, platform == PointClondMode.NotPointClond.ToString());
|
||||
Menu.SetChecked(EditorImmersalMode, platform == PointClondMode.Immersal.ToString());
|
||||
//Menu.SetChecked(WebPlayMode, platform == HotUpdateMode.WEB_PLAYMODE.ToString());
|
||||
Debug.LogError("ChangePoindClondSchema");
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void SetPoindClondMode(PointClondMode mode)
|
||||
{
|
||||
// 清除所有旧模式定义
|
||||
var currentTarget = EditorUserBuildSettings.selectedBuildTargetGroup;
|
||||
if (currentTarget == BuildTargetGroup.Unknown) return;
|
||||
|
||||
var defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(currentTarget)
|
||||
.Split(';')
|
||||
.Where(d => !Enum.GetNames(typeof(HotUpdateMode)).Contains(d))
|
||||
.ToList();
|
||||
|
||||
// 添加新模式
|
||||
defines.Add(mode.ToString());
|
||||
PlayerSettings.SetScriptingDefineSymbolsForGroup(currentTarget, string.Join(";", defines));
|
||||
Debug.Log($"当前编译符号: {string.Join(";", defines)}"); // 添加调试日志
|
||||
_pointClondMode = mode;
|
||||
EditorPrefs.SetString("ChangePoindClondSchema", _pointClondMode.ToString());
|
||||
|
||||
ValidateModeMenu();
|
||||
AssetDatabase.Refresh();
|
||||
// 添加解决方案文件重新生成逻辑
|
||||
EditorApplication.delayCall += () =>
|
||||
{
|
||||
EditorApplication.ExecuteMenuItem("Assets/Open C# Project");
|
||||
UnityEditor.Compilation.CompilationPipeline.RequestScriptCompilation();
|
||||
Debug.Log("已强制重新生成解决方案文件");
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public enum PointClondMode
|
||||
{
|
||||
//非点云模式,
|
||||
NotPointClond,
|
||||
//Immersal模式
|
||||
Immersal,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 076111eb4cfd413287c1d7f299fe5a1f
|
||||
timeCreated: 1757471872
|
||||
378
Assets/00.StaryEvoTools/Editor/BuildAsset/CreatAssetWindow.cs
Normal file
378
Assets/00.StaryEvoTools/Editor/BuildAsset/CreatAssetWindow.cs
Normal file
@@ -0,0 +1,378 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
#if HotUpdate
|
||||
using HybridCLR.Editor;
|
||||
using HybridCLR.Editor.Settings;
|
||||
#endif
|
||||
using Sirenix.OdinInspector;
|
||||
using Sirenix.OdinInspector.Editor;
|
||||
using UnityEditor;
|
||||
using UnityEditorInternal;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Stary.Evo.Editor
|
||||
{
|
||||
public class CreatAssetWindow : OdinEditorWindow
|
||||
{
|
||||
[MenuItem("Evo/Dev/创建Domain作用域", false, 1)]
|
||||
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 artDomainPath = $"{Application.dataPath}/Art/{domain}";
|
||||
if (!Directory.Exists(artDomainPath))
|
||||
{
|
||||
Directory.CreateDirectory(artDomainPath);
|
||||
|
||||
if (!Directory.Exists(artDomainPath))
|
||||
//创建Animation文件夹
|
||||
CreatDirectory(artDomainPath + "/Animation");
|
||||
//创建Effects文件夹
|
||||
CreatDirectory(artDomainPath + "/Effects");
|
||||
//创建Fbx文件夹
|
||||
CreatDirectory(artDomainPath + "/Fbx");
|
||||
//创建Font文件夹
|
||||
CreatDirectory(artDomainPath + "/Font");
|
||||
//创建Materials文件夹
|
||||
CreatDirectory(artDomainPath + "/Materials");
|
||||
//创建Prefabs文件夹
|
||||
CreatDirectory(artDomainPath + "/Prefabs");
|
||||
//创建Scenes文件夹
|
||||
CreatDirectory(artDomainPath + "/Scenes");
|
||||
//创建/Scenes/Test文件夹
|
||||
CreatDirectory(artDomainPath + "/Scenes/Test");
|
||||
//创建Shader文件夹
|
||||
CreatDirectory(artDomainPath + "/Shader");
|
||||
//创建Textures文件夹
|
||||
CreatDirectory(artDomainPath + "/Textures");
|
||||
File.WriteAllTextAsync(
|
||||
$"{artDomainPath}/这里放所有美术的资源,因涉及打包依赖等原因,不建议在上一层节点新增文件夹,如涉及文件夹规范等问题请@张铮.hint", "");
|
||||
}
|
||||
|
||||
//创建Art 测试场景
|
||||
/* 2. 再建 Scenes/Test */
|
||||
string sceneDir = $"{artDomainPath}/Scenes/Test";
|
||||
if (!Directory.Exists(sceneDir))
|
||||
{
|
||||
Directory.CreateDirectory(sceneDir);
|
||||
/* 3. 创建新场景 */
|
||||
var newScene = UnityEditor.SceneManagement.EditorSceneManager.NewScene(
|
||||
UnityEditor.SceneManagement.NewSceneSetup.DefaultGameObjects,
|
||||
UnityEditor.SceneManagement.NewSceneMode.Single);
|
||||
|
||||
/* 4. 删除默认相机(和灯光)*/
|
||||
foreach (var go in newScene.GetRootGameObjects())
|
||||
{
|
||||
if (go.name == "Main Camera" || go.name == "Directional Light")
|
||||
GameObject.DestroyImmediate(go);
|
||||
}
|
||||
|
||||
/* 5. 载入并实例化 RKCameraRig.prefab */
|
||||
string prefabPath = "Prefabs/BaseSetting/RKCameraRig";
|
||||
|
||||
var prefab = Resources.Load<GameObject>(prefabPath);
|
||||
var spawned = (GameObject)PrefabUtility.InstantiatePrefab(prefab);
|
||||
spawned.name = "RKCameraRigTest";
|
||||
|
||||
/* 6. 保存场景 */
|
||||
string scenePath = Path.Combine("Assets/Art", name, "Scenes", "Test", "TestScene.unity");
|
||||
UnityEditor.SceneManagement.EditorSceneManager.SaveScene(newScene, scenePath);
|
||||
}
|
||||
|
||||
|
||||
string domainPath = $"{Application.dataPath}/Domain/{domain}";
|
||||
if (Directory.Exists(domainPath + "/AddressableRes/Config/DomainConfig.asset"))
|
||||
{
|
||||
EditorUtility.DisplayDialog("错误!", $"\"{domain}\"已经存在,无法创建", "确定");
|
||||
return;
|
||||
}
|
||||
|
||||
CreatDirectory(domainPath);
|
||||
|
||||
//程序资源存放文件夹
|
||||
string resPath = $"{domainPath}/AddressableRes";
|
||||
CreatDirectory(resPath);
|
||||
//创建音频文件夹
|
||||
CreatDirectory(resPath + "/Audios");
|
||||
//创建Config文件夹
|
||||
CreatDirectory(resPath + "/Config");
|
||||
//创建Dll文件夹
|
||||
CreatDirectory(resPath + "/Dll");
|
||||
//创建Prefabs文件夹
|
||||
CreatDirectory(resPath + "/Prefabs");
|
||||
//创建Scenes文件夹
|
||||
CreatDirectory(resPath + "/Scenes");
|
||||
//创建SpriteAtlas文件夹
|
||||
CreatDirectory(resPath + "/SpriteAtlas");
|
||||
//创建Sprites文件夹
|
||||
CreatDirectory(resPath + "/Sprites");
|
||||
//创建Video文件夹
|
||||
CreatDirectory(resPath + "/Video");
|
||||
|
||||
File.WriteAllTextAsync($"{resPath}/这里放所有参与热更的资源.hint", "");
|
||||
|
||||
//主入口预制件
|
||||
GameObject gameObj = new GameObject(domain);
|
||||
gameObj.transform.position = Vector3.zero;
|
||||
gameObj.transform.rotation = Quaternion.identity;
|
||||
gameObj.name = domain;
|
||||
|
||||
|
||||
CreatDirectory($"{resPath}/Prefabs");
|
||||
string rootPfbFilePath = $"Assets/Domain/{domain}/AddressableRes/Prefabs/{domain}.prefab";
|
||||
var localPath = AssetDatabase.GenerateUniqueAssetPath(rootPfbFilePath);
|
||||
PrefabUtility.SaveAsPrefabAsset(gameObj, localPath);
|
||||
|
||||
//存放脚本文件夹
|
||||
string scriptsPath = $"{domainPath}/HotUpdate";
|
||||
CreatDirectory(scriptsPath);
|
||||
File.WriteAllTextAsync($"{scriptsPath}/这里放所有参与热更的脚本文件.hint", "该文件夹中的程序集定义文件,请勿删除,非常重要。");
|
||||
|
||||
//创建配置文件夹
|
||||
string confPath = $"{domainPath}/Conf";
|
||||
CreatDirectory(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);
|
||||
}
|
||||
|
||||
//模块化脚本生成配置
|
||||
string domainClassName = $"{domain}Domain";
|
||||
string architectureClassName = $"{domain}Architecture";
|
||||
#if HotUpdate
|
||||
//模块配置资源
|
||||
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");
|
||||
//
|
||||
|
||||
|
||||
//编辑器配置资源
|
||||
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);
|
||||
if (domain != "Main")
|
||||
{
|
||||
// 将程序集定义添加到 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();
|
||||
}
|
||||
#endif
|
||||
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)
|
||||
.Replace("DomainNameXX", domain);
|
||||
await writer.WriteAsync(domainTemplate);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[TitleGroup("预览Domain作用域")]
|
||||
[ListDrawerSettings(DraggableItems = false, ShowFoldout = false, ShowPaging = false, ShowItemCount = false,
|
||||
HideRemoveButton = true, HideAddButton = true)]
|
||||
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;
|
||||
}
|
||||
|
||||
private static void CreatDirectory(string artDomainPath)
|
||||
{
|
||||
if (!Directory.Exists(artDomainPath))
|
||||
{
|
||||
//创建Animation文件夹
|
||||
Directory.CreateDirectory(artDomainPath);
|
||||
}
|
||||
}
|
||||
|
||||
public static void CreateDomainDirectory(string domain)
|
||||
{
|
||||
string artDomainPath = $"{Application.dataPath}/Art/{domain}";
|
||||
if (!Directory.Exists(artDomainPath))
|
||||
{
|
||||
EditorUtility.DisplayDialog("提示", $"不存在此Domain:{domain},无法创建", "确定");
|
||||
return;
|
||||
}
|
||||
|
||||
//创建Animation文件夹
|
||||
CreatDirectory(artDomainPath + "/Animation");
|
||||
//创建Effects文件夹
|
||||
CreatDirectory(artDomainPath + "/Effects");
|
||||
//创建Fbx文件夹
|
||||
CreatDirectory(artDomainPath + "/Fbx");
|
||||
//创建Font文件夹
|
||||
CreatDirectory(artDomainPath + "/Font");
|
||||
//创建Materials文件夹
|
||||
CreatDirectory(artDomainPath + "/Materials");
|
||||
//创建Prefabs文件夹
|
||||
CreatDirectory(artDomainPath + "/Prefabs");
|
||||
//创建Scenes文件夹
|
||||
CreatDirectory(artDomainPath + "/Scenes");
|
||||
//创建/Scenes/Test文件夹
|
||||
CreatDirectory(artDomainPath + "/Scenes/Test");
|
||||
//创建Shader文件夹
|
||||
CreatDirectory(artDomainPath + "/Shader");
|
||||
//创建Textures文件夹
|
||||
CreatDirectory(artDomainPath + "/Textures");
|
||||
|
||||
string domainPath = $"{Application.dataPath}/Domain/{domain}";
|
||||
//程序资源存放文件夹
|
||||
string resPath = $"{domainPath}/AddressableRes";
|
||||
CreatDirectory(resPath);
|
||||
//创建音频文件夹
|
||||
CreatDirectory(resPath + "/Audios");
|
||||
//创建Config文件夹
|
||||
CreatDirectory(resPath + "/Config");
|
||||
//创建Dll文件夹
|
||||
CreatDirectory(resPath + "/Dll");
|
||||
//创建Prefabs文件夹
|
||||
CreatDirectory(resPath + "/Prefabs");
|
||||
//创建Scenes文件夹
|
||||
CreatDirectory(resPath + "/Scenes");
|
||||
//创建SpriteAtlas文件夹
|
||||
CreatDirectory(resPath + "/SpriteAtlas");
|
||||
//创建Sprites文件夹
|
||||
CreatDirectory(resPath + "/Sprites");
|
||||
//创建Video文件夹
|
||||
CreatDirectory(resPath + "/Video");
|
||||
|
||||
AssetDatabase.Refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7d162e11fd4c47ee9f6995ad7bb6bac1
|
||||
timeCreated: 1742377890
|
||||
@@ -0,0 +1,79 @@
|
||||
using System;
|
||||
using Stary.Evo.Editor;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Stary.Evo
|
||||
{
|
||||
[InitializeOnLoad]
|
||||
public static class CreatDomainDirectory
|
||||
{
|
||||
static CreatDomainDirectory()
|
||||
{
|
||||
// 注意 因为这个构造函数会被重复调用,
|
||||
//所以为了防止quitting和update两个回调被重复添加,需要先移除后添加
|
||||
EditorApplication.quitting -= OnEditorQuit;
|
||||
EditorApplication.quitting += OnEditorQuit;
|
||||
|
||||
Debug.Log(" 自动运行 ");
|
||||
|
||||
if (!EditorPrefs.HasKey("StartUp"))
|
||||
{
|
||||
// 通过标记记录是否已经执行过该方法
|
||||
OnEditorStartUp();
|
||||
EditorPrefs.SetInt("StartUp", 1);
|
||||
|
||||
if (EditorPrefs.GetInt("CreatDomainDirectory") == 0)
|
||||
{
|
||||
EditorPrefs.SetInt("CreatDomainDirectory", 1);
|
||||
bool isOk = EditorUtility.DisplayDialog("提示", "发现目录存在缺失,是否检索并创建缺失目录", "是", "否");
|
||||
if (isOk)
|
||||
{
|
||||
var DomainAll = CreatAssetWindow.GetCreatDomainAll();
|
||||
foreach (var domain in DomainAll)
|
||||
{
|
||||
CreatAssetWindow.CreateDomainDirectory(domain.DomainName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (EditorPrefs.GetString("ChangeHotUpdateSchema") == "")
|
||||
{
|
||||
ChangeHotUpdateSchema.SetHotUpdateMode(HotUpdateMode.NotUpdate);
|
||||
}
|
||||
else
|
||||
{
|
||||
ChangeHotUpdateSchema.SetHotUpdateMode(
|
||||
Enum.Parse<HotUpdateMode>(EditorPrefs.GetString("ChangeHotUpdateSchema")));
|
||||
}
|
||||
|
||||
if (EditorPrefs.GetString("ChangePlayerSchema") == "")
|
||||
{
|
||||
ChangePlayerSchema.SetPlayerMode(PLayerMode.EDITOR_SIMULATEMODE);
|
||||
}
|
||||
else
|
||||
{
|
||||
ChangePlayerSchema.SetPlayerMode(
|
||||
Enum.Parse<PLayerMode>(EditorPrefs.GetString("ChangePlayerSchema")));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// UnityEditor 关闭时取消标记
|
||||
/// </summary>
|
||||
private static void OnEditorQuit()
|
||||
{
|
||||
EditorPrefs.DeleteKey("StartUp");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 只会在UnityEditor启动时执行一次
|
||||
/// </summary>
|
||||
static void OnEditorStartUp()
|
||||
{
|
||||
Debug.Log(" UnityEditor 启动 ");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5388598f49c545f4ae628ad5d1b4e459
|
||||
timeCreated: 1744798434
|
||||
3
Assets/00.StaryEvoTools/Editor/BuildAsset/Entity.meta
Normal file
3
Assets/00.StaryEvoTools/Editor/BuildAsset/Entity.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7380165adc3342dbacef4abe80ac2bb7
|
||||
timeCreated: 1742867444
|
||||
@@ -0,0 +1,61 @@
|
||||
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.ArrowRepeat, IconAlignment = IconAlignment.RightEdge)]
|
||||
public void CreatDomain()
|
||||
{
|
||||
if (DomainName == "Main")
|
||||
{
|
||||
EditorUtility.DisplayDialog("提示", "主包Main作用域无法再次创建", "确定");
|
||||
return;
|
||||
}
|
||||
bool isOk = EditorUtility.DisplayDialog("提示", "是否检索并创建缺失目录", "是", "否");
|
||||
if (isOk)
|
||||
{
|
||||
CreatAssetWindow.CreateDomainDirectory(DomainName);
|
||||
}
|
||||
}
|
||||
[HorizontalGroup(Width = 60)]
|
||||
[Button("", Icon = SdfIconType.XCircle, IconAlignment = IconAlignment.RightEdge)]
|
||||
public void CloseDomain()
|
||||
{
|
||||
if (DomainName == "Main")
|
||||
{
|
||||
EditorUtility.DisplayDialog("提示", "主包Main作用域无法删除", "确定");
|
||||
return;
|
||||
}
|
||||
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
|
||||
@@ -0,0 +1,177 @@
|
||||
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;
|
||||
|
||||
#region 打包相关参数
|
||||
|
||||
public string packageName;
|
||||
protected string selectedBuildPipelines;
|
||||
public string packageVersion;
|
||||
|
||||
#endregion
|
||||
// protected bool isSimulate;
|
||||
// protected bool isRaw;
|
||||
|
||||
[Title("清理构建缓存", titleAlignment: TitleAlignments.Centered)]
|
||||
[HorizontalGroup("BuildCache")]
|
||||
[InfoBox("当不勾选此项的时候,引擎会开启增量打包模式,会极大提高构建速度!")]
|
||||
[OnValueChanged("SetBuildCacheToggle")]
|
||||
[HideIf("@ selectedBuildPipelines==EBuildPipeline.EditorSimulateBuildPipeline.ToString()")]
|
||||
public bool clearBuildCacheToggle;
|
||||
|
||||
[Title("依赖数据库", titleAlignment: TitleAlignments.Centered)]
|
||||
[HorizontalGroup("BuildCache")]
|
||||
[InfoBox("当开启此项的时候,会极大提高构建速度!")]
|
||||
[OnValueChanged("SetUseAssetDependencyDB")]
|
||||
[HideIf("@ selectedBuildPipelines==EBuildPipeline.EditorSimulateBuildPipeline.ToString()")]
|
||||
public bool useAssetDependencyDBToggle=true;
|
||||
|
||||
|
||||
|
||||
[Title("资源包的压缩方式", titleAlignment: TitleAlignments.Centered)]
|
||||
[HorizontalGroup("BuildCache"), HideLabel]
|
||||
[InfoBox("推荐LZ4压缩方式")]
|
||||
[OnValueChanged("SetCompression")]
|
||||
[HideIf("@ selectedBuildPipelines==EBuildPipeline.EditorSimulateBuildPipeline.ToString()")]
|
||||
public ECompressOption compression = ECompressOption.LZ4;
|
||||
|
||||
// [Title("资源包文件名称样式", titleAlignment: TitleAlignments.Centered)]
|
||||
// [HorizontalGroup("FileStyle"), HideLabel]
|
||||
// [OnValueChanged("SetFileNameStyle")]
|
||||
// [HideIf("@ dataSetting.selectedBuildPipelines==EBuildPipeline.EditorSimulateBuildPipeline")]
|
||||
private EFileNameStyle fileNameStyle = EFileNameStyle.BundleName;
|
||||
|
||||
[Title("首包资源文件的拷贝方式", titleAlignment: TitleAlignments.Centered)]
|
||||
[VerticalGroup("BuildCache/FileStyle"), HideLabel]
|
||||
[InfoBox("资源拷贝方式,是否拷贝StreamingAssets")]
|
||||
[OnValueChanged("SetCopyBuildinFileOption")]
|
||||
[HideIf("@ selectedBuildPipelines==EBuildPipeline.EditorSimulateBuildPipeline.ToString()")]
|
||||
public EBuildinFileCopyOption copyBuildinFileOption = EBuildinFileCopyOption.ClearAndCopyAll;
|
||||
|
||||
[VerticalGroup("BuildCache/FileStyle"), HideLabel]
|
||||
[OnValueChanged("SetCopyBuildinFileParams")]
|
||||
[ShowIf(
|
||||
"@copyBuildinFileOption==EBuildinFileCopyOption.ClearAndCopyByTags||copyBuildinFileOption==EBuildinFileCopyOption.OnlyCopyByTags ")]
|
||||
public string copyBuildinFileParams;
|
||||
|
||||
public AbstractBuildPipelineViewer(string packageName,string selectedBuildPipelines,string packageVersion)
|
||||
{
|
||||
//this.dataSetting = dataSetting;
|
||||
SetBuildPackageData(packageName,selectedBuildPipelines,packageVersion);
|
||||
|
||||
useAssetDependencyDBToggle = true;
|
||||
SetUseAssetDependencyDB();
|
||||
clearBuildCacheToggle = false;
|
||||
SetBuildCacheToggle();
|
||||
compression = ECompressOption.LZ4;
|
||||
SetCompression();
|
||||
fileNameStyle = EFileNameStyle.BundleName;
|
||||
SetFileNameStyle();
|
||||
copyBuildinFileOption = EBuildinFileCopyOption.ClearAndCopyAll;
|
||||
SetCopyBuildinFileOption();
|
||||
}
|
||||
|
||||
public void SetBuildPackageData(string packageName,string selectedBuildPipelines,string packageVersion)
|
||||
{
|
||||
this.packageName = packageName;
|
||||
this.selectedBuildPipelines = selectedBuildPipelines;
|
||||
this.packageVersion = packageVersion;
|
||||
}
|
||||
public void SetBuildPackagePackageName(string packageName)
|
||||
{
|
||||
this.packageName = packageName;
|
||||
}
|
||||
public void SetBuildPackagePackageVersion(string packageVersion)
|
||||
{
|
||||
this.packageVersion = packageVersion;
|
||||
}
|
||||
#region AssetBuild
|
||||
|
||||
private void SetCompression()
|
||||
{
|
||||
AssetBundleBuilderSetting.SetPackageCompressOption(packageName, selectedBuildPipelines,
|
||||
compression);
|
||||
}
|
||||
|
||||
private void SetFileNameStyle()
|
||||
{
|
||||
|
||||
AssetBundleBuilderSetting.SetPackageFileNameStyle(packageName, selectedBuildPipelines,
|
||||
fileNameStyle);
|
||||
}
|
||||
|
||||
private void SetCopyBuildinFileOption()
|
||||
{
|
||||
|
||||
AssetBundleBuilderSetting.SetPackageBuildinFileCopyOption(packageName,
|
||||
selectedBuildPipelines, copyBuildinFileOption);
|
||||
|
||||
//PlayerPrefs.SetInt("CopyBuildinFileOption", (int)copyBuildinFileOption);
|
||||
}
|
||||
|
||||
private void SetCopyBuildinFileParams()
|
||||
{
|
||||
|
||||
AssetBundleBuilderSetting.SetPackageBuildinFileCopyParams(packageName,
|
||||
selectedBuildPipelines, copyBuildinFileParams);
|
||||
//PlayerPrefs.SetInt("CopyBuildinFileOption", (int)copyBuildinFileOption);
|
||||
}
|
||||
|
||||
public void SetBuildCacheToggle()
|
||||
{
|
||||
AssetBundleBuilderSetting.SetPackageClearBuildCache(packageName, selectedBuildPipelines,
|
||||
clearBuildCacheToggle);
|
||||
}
|
||||
|
||||
public void SetUseAssetDependencyDB()
|
||||
{
|
||||
|
||||
AssetBundleBuilderSetting.SetPackageUseAssetDependencyDB(packageName, selectedBuildPipelines,
|
||||
useAssetDependencyDBToggle);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
public virtual void ExecuteBuild()
|
||||
{
|
||||
// GetPackageVersion();
|
||||
// if (dataSetting.packageName == "Main")
|
||||
// {
|
||||
// dataSetting.GetBuildPackageVersion(true);
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 创建加密类实例
|
||||
/// </summary>
|
||||
protected IEncryptionServices CreateEncryptionInstance()
|
||||
{
|
||||
var encyptionClassName =
|
||||
AssetBundleBuilderSetting.GetPackageEncyptionServicesClassName(packageName,
|
||||
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
|
||||
121
Assets/00.StaryEvoTools/Editor/BuildAsset/OneKeyBuildWindow.cs
Normal file
121
Assets/00.StaryEvoTools/Editor/BuildAsset/OneKeyBuildWindow.cs
Normal file
@@ -0,0 +1,121 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
#if HotUpdate
|
||||
using HybridCLR.Editor.Commands;
|
||||
#endif
|
||||
using Newtonsoft.Json;
|
||||
using Sirenix.OdinInspector;
|
||||
using Sirenix.OdinInspector.Editor;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using YooAsset.Editor;
|
||||
|
||||
namespace Stary.Evo.Editor
|
||||
{
|
||||
public class OneKeyBuildWindow : OdinEditorWindow
|
||||
{
|
||||
[MenuItem("Evo/Dev/(一键)打包工具",false, 3)]
|
||||
static void Init()
|
||||
{
|
||||
#if NotUpdate
|
||||
if (EditorUtility.DisplayDialog("提示", "当前为非热更模式,不支持热更打包功能,是否切换热更模式", "是", "否"))
|
||||
{
|
||||
ChangeHotUpdateSchema.SetHotUpdateMode(HotUpdateMode.HotUpdate);
|
||||
}
|
||||
#elif HotUpdate
|
||||
var window = (OneKeyBuildWindow)EditorWindow.GetWindow(typeof(OneKeyBuildWindow));
|
||||
window.Show();
|
||||
#endif
|
||||
}
|
||||
|
||||
[Title("全选"), OnValueChanged("OneKeyBuildEvent"), HideLabel]
|
||||
public bool isOneKeyBuild;
|
||||
|
||||
[ListDrawerSettings(DraggableItems = false, ShowFoldout = false, ShowPaging = false, ShowItemCount = false,
|
||||
HideRemoveButton = true,HideAddButton = true)]
|
||||
public List<OneKeyBuildEntity> OneKeyBuildEntities = new List<OneKeyBuildEntity>();
|
||||
|
||||
protected override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
OneKeyBuildEntities.Clear();
|
||||
var creatDomainAll = CreatAssetWindow.GetCreatDomainAll();
|
||||
foreach (var domainEntity in creatDomainAll)
|
||||
{
|
||||
OneKeyBuildEntities.Add(new OneKeyBuildEntity()
|
||||
{
|
||||
DomainName = domainEntity.DomainName
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
[Button("(一键)标记选择资源", ButtonSizes.Large)]
|
||||
public void OneClickMark()
|
||||
{
|
||||
#if HotUpdate
|
||||
AutoBuildPackage.OneClickMark(OneKeyBuildEntities);
|
||||
EditorUtility.DisplayDialog("提示", $"标记所有资源完成!", "确定");
|
||||
#endif
|
||||
}
|
||||
|
||||
[Button("(一键)收集shader【材质异常或资源修改】", ButtonSizes.Large)]
|
||||
public void OneShaderMark()
|
||||
{
|
||||
#if HotUpdate
|
||||
EditorTools.ClearUnityConsole();
|
||||
AutoBuildPackage.OneShaderMark(OneKeyBuildEntities);
|
||||
|
||||
EditorUtility.DisplayDialog("提示", $"标记所有shader完成!", "确定");
|
||||
#endif
|
||||
}
|
||||
|
||||
[Button("(一键)获取服务器版本", ButtonSizes.Large)]
|
||||
public async void OneUpdatePackageVersion()
|
||||
{
|
||||
//打包
|
||||
EditorTools.ClearUnityConsole();
|
||||
AutoBuildPackage.OneUpdatePackageVersion(OneKeyBuildEntities);
|
||||
EditorUtility.DisplayDialog("提示", $"获取服务器版本完成", "确定");
|
||||
}
|
||||
|
||||
[Button("(一键)打包选择资源", ButtonSizes.Large)]
|
||||
public void OneClickBuild()
|
||||
{
|
||||
//打包
|
||||
EditorTools.ClearUnityConsole();
|
||||
|
||||
AutoBuildPackage.OneClickBuild(OneKeyBuildEntities);
|
||||
|
||||
EditorUtility.DisplayDialog("提示", $"开始打包资源!", "确定");
|
||||
}
|
||||
|
||||
[Button("(一键)上传服务器版本", ButtonSizes.Large)]
|
||||
public async void OneUpdatePackage()
|
||||
{
|
||||
//打包
|
||||
EditorTools.ClearUnityConsole();
|
||||
AutoBuildPackage.OneUpdatePackage(OneKeyBuildEntities);
|
||||
EditorUtility.DisplayDialog("提示", $"服务器上传完成", "确定");
|
||||
}
|
||||
|
||||
private void OneKeyBuildEvent()
|
||||
{
|
||||
for (int i = 0; i < OneKeyBuildEntities.Count; i++)
|
||||
{
|
||||
OneKeyBuildEntities[i].isRaw = isOneKeyBuild;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class OneKeyBuildEntity
|
||||
{
|
||||
[Title("是否打包", titleAlignment: TitleAlignments.Centered)] [HideLabel, HorizontalGroup("OneKeyBUildEntity")]
|
||||
public bool isRaw;
|
||||
|
||||
[Title("包名", titleAlignment: TitleAlignments.Centered)]
|
||||
[HideLabel, ReadOnly, HorizontalGroup("OneKeyBUildEntity")]
|
||||
public string DomainName;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 26f920eb9cb048179fdc641cfd92ed93
|
||||
timeCreated: 1746583992
|
||||
@@ -0,0 +1,54 @@
|
||||
using System;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using YooAsset;
|
||||
using YooAsset.Editor;
|
||||
|
||||
namespace Stary.Evo.Editor
|
||||
{
|
||||
[Serializable]
|
||||
public class RawfileBuildpipelineViewer:AbstractBuildPipelineViewer
|
||||
{
|
||||
public RawfileBuildpipelineViewer(string packageName, string selectedBuildPipelines, string packageVersion) :
|
||||
base(packageName, selectedBuildPipelines, packageVersion)
|
||||
{
|
||||
// isSimulate = false;
|
||||
// isRaw = true;
|
||||
}
|
||||
|
||||
|
||||
public override void ExecuteBuild()
|
||||
{
|
||||
var fileNameStyle = AssetBundleBuilderSetting.GetPackageFileNameStyle(packageName, selectedBuildPipelines);
|
||||
var buildinFileCopyOption = AssetBundleBuilderSetting.GetPackageBuildinFileCopyOption(packageName, selectedBuildPipelines);
|
||||
var buildinFileCopyParams = AssetBundleBuilderSetting.GetPackageBuildinFileCopyParams(packageName, selectedBuildPipelines);
|
||||
var clearBuildCache = AssetBundleBuilderSetting.GetPackageClearBuildCache(packageName, selectedBuildPipelines);
|
||||
var useAssetDependencyDB = AssetBundleBuilderSetting.GetPackageUseAssetDependencyDB(packageName, selectedBuildPipelines);
|
||||
|
||||
RawFileBuildParameters buildParameters = new RawFileBuildParameters();
|
||||
buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot();
|
||||
buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot();
|
||||
buildParameters.BuildPipeline = selectedBuildPipelines;
|
||||
buildParameters.BuildBundleType = (int)EBuildBundleType.RawBundle;
|
||||
buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget;
|
||||
buildParameters.PackageName = packageName;
|
||||
buildParameters.PackageVersion =packageVersion;
|
||||
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)
|
||||
{
|
||||
Debug.Log($"Build Success! 【{buildResult.OutputPackageDirectory}】");
|
||||
// EditorUtility.RevealInFinder(buildResult.OutputPackageDirectory);
|
||||
base.ExecuteBuild();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 06dda5f218054dee83d2a37d42bb2b9a
|
||||
timeCreated: 1741830326
|
||||
@@ -0,0 +1,70 @@
|
||||
using System;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using YooAsset;
|
||||
using YooAsset.Editor;
|
||||
|
||||
namespace Stary.Evo.Editor
|
||||
{
|
||||
[Serializable]
|
||||
public class ScriptableBuildPipelineViewer:AbstractBuildPipelineViewer
|
||||
{
|
||||
public ScriptableBuildPipelineViewer(string packageName, string selectedBuildPipelines, string packageVersion) :
|
||||
base(packageName, selectedBuildPipelines, packageVersion)
|
||||
{
|
||||
//isSimulate = false;
|
||||
}
|
||||
|
||||
public override void ExecuteBuild()
|
||||
{
|
||||
var fileNameStyle = AssetBundleBuilderSetting.GetPackageFileNameStyle(packageName, selectedBuildPipelines);
|
||||
var buildinFileCopyOption = AssetBundleBuilderSetting.GetPackageBuildinFileCopyOption(packageName, selectedBuildPipelines);
|
||||
var buildinFileCopyParams = AssetBundleBuilderSetting.GetPackageBuildinFileCopyParams(packageName, selectedBuildPipelines);
|
||||
var compressOption = AssetBundleBuilderSetting.GetPackageCompressOption(packageName, selectedBuildPipelines);
|
||||
var clearBuildCache = AssetBundleBuilderSetting.GetPackageClearBuildCache(packageName, selectedBuildPipelines);
|
||||
var useAssetDependencyDB = AssetBundleBuilderSetting.GetPackageUseAssetDependencyDB(packageName, selectedBuildPipelines);
|
||||
var builtinShaderBundleName = GetBuiltinShaderBundleName();
|
||||
|
||||
ScriptableBuildParameters buildParameters = new ScriptableBuildParameters();
|
||||
buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot();
|
||||
buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot();
|
||||
buildParameters.BuildPipeline = selectedBuildPipelines;
|
||||
buildParameters.BuildBundleType = (int)EBuildBundleType.AssetBundle;
|
||||
buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget;
|
||||
buildParameters.PackageName = packageName;
|
||||
buildParameters.PackageVersion = packageVersion;
|
||||
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)
|
||||
{
|
||||
Debug.Log($"Build Success! 【{buildResult.OutputPackageDirectory}】");
|
||||
// EditorUtility.RevealInFinder(buildResult.OutputPackageDirectory);
|
||||
base.ExecuteBuild();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 内置着色器资源包名称
|
||||
/// 注意:和自动收集的着色器资源包名保持一致!
|
||||
/// </summary>
|
||||
private string GetBuiltinShaderBundleName()
|
||||
{
|
||||
var uniqueBundleName = AssetBundleCollectorSettingData.Setting.UniqueBundleName;
|
||||
var packRuleResult = DefaultPackRule.CreateShadersPackRuleResult();
|
||||
return packRuleResult.GetBundleName(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(string packageName, string selectedBuildPipelines, string packageVersion) : base(packageName, selectedBuildPipelines, packageVersion)
|
||||
{
|
||||
//isSimulate = true;
|
||||
}
|
||||
|
||||
public override void ExecuteBuild()
|
||||
{
|
||||
var fileNameStyle = AssetBundleBuilderSetting.GetPackageFileNameStyle(packageName, selectedBuildPipelines);
|
||||
var buildinFileCopyOption = AssetBundleBuilderSetting.GetPackageBuildinFileCopyOption(packageName, selectedBuildPipelines);
|
||||
var buildinFileCopyParams = AssetBundleBuilderSetting.GetPackageBuildinFileCopyParams(packageName, selectedBuildPipelines);
|
||||
|
||||
EditorSimulateBuildParameters buildParameters = new EditorSimulateBuildParameters();
|
||||
buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot();
|
||||
buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot();
|
||||
buildParameters.BuildPipeline = selectedBuildPipelines;
|
||||
buildParameters.BuildBundleType = (int)EBuildBundleType.VirtualBundle;
|
||||
buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget;
|
||||
buildParameters.PackageName = packageName;
|
||||
buildParameters.PackageVersion = packageVersion;
|
||||
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