This commit is contained in:
2025-10-24 11:11:59 +08:00
parent c3f33afd70
commit cdd5eafa64
28 changed files with 1316 additions and 162 deletions

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: f227eb3ecaea4ee9a398278ff8da4092
timeCreated: 1761189727

View File

@@ -0,0 +1,580 @@
/****************************************************
文件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/Art资源打包工具")]
static void ShowWindows()
{
if (CreatAssetWindow.GetCreatDomainAll().Count <= 0)
{
EditorUtility.DisplayDialog("提示", "不存在Domain元素无法打开此面板请先创建Domain元素", "确定");
return;
}
window = (BuildAssetWindow)EditorWindow.GetWindow(typeof(BuildAssetWindow));
window.Show();
}
protected override void OnDisable()
{
base.OnDisable();
EditorUtility.ClearProgressBar();
}
protected override async void Initialize()
{
base.Initialize();
GetBuildPackageNames();
//初始化读取资源配置表
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;
}
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;
public 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.AddMark);
#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 = 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;
// 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();
BuildServerPath();
UpdateBuildPipelineButtonName();
}
public void UpdateBuildPipelineButtonName()
{
onBuildPipelineEntity.SetButtonName($"打包资源包【版本:{BuildAssetDataSetting.packageVersion}】");
onUpdateBuildPipelineEntity.SetButtonName($"更新至服务器【版本:{BuildAssetDataSetting.packageVersion}】");
}
/// <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}】");
}
}
public enum BuildAssetType
{
Login,
Build,
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: be7ec9bc4c8d40b0850b440246ea122f
timeCreated: 1761198971

View File

@@ -0,0 +1,374 @@
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/创建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 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 = "RKCameraRig";
/* 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}";
//创建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();
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: e5909a71d7434c24809d3529ded3e0a0
timeCreated: 1761202481

View File

@@ -64,7 +64,8 @@ namespace Stary.Evo.Editor
{
if (oneKeyBUildEntity.isRaw)
{
MarkAdressable.CollectSVC(oneKeyBUildEntity.DomainName);
MarkAdressable.CollectSVC(MarkAdressable.DomainRoot, oneKeyBUildEntity.DomainName,
() => { EditorUtility.DisplayDialog("收集shader【材质异常或资源修改】", "收集成功", "确定"); });
}
}
@@ -165,7 +166,9 @@ namespace Stary.Evo.Editor
{
buildAssetDataSetting.environmentType = EnvironmentType.Release;
buildAssetDataSetting.SetEnvironmentType();
buildAssetDataSetting.viewer = new BuiltinBuildPipelineViewer(buildAssetDataSetting);
buildAssetDataSetting.viewer = new BuiltinBuildPipelineViewer(buildAssetDataSetting.packageName,
buildAssetDataSetting.selectedBuildPipelines.ToString(),
buildAssetDataSetting.packageVersion);
buildAssetDataSetting.viewer.clearBuildCacheToggle = true;
buildAssetDataSetting.viewer.SetBuildCacheToggle();
EditorApplication.delayCall += buildAssetDataSetting.viewer.ExecuteBuild;

View File

@@ -10,7 +10,7 @@ namespace Stary.Evo.Editor
{
public static OdinEditorWindow window;
[MenuItem("Evo/Apk打包工具")]
[MenuItem("Evo/Dev/Apk打包工具")]
static void ShowWindows()
{
window = (BuildApkWindow)EditorWindow.GetWindow(typeof(BuildApkWindow));

View File

@@ -9,7 +9,7 @@ using YooAsset.Editor;
namespace Stary.Evo.Editor
{
[CreateAssetMenu(fileName = "BuildAssetDataSetting", menuName = "Evo/BuildAssetDataSetting")]
public class BuildAssetDataSetting : SerializedScriptableObject
public class BuildAssetDataSetting : SerializedScriptableObject
{
public void OnEnable()
{
@@ -143,6 +143,7 @@ namespace Stary.Evo.Editor
packageVersion = $"{packageVersionX}.{packageVersionY}.{packageVersionZ}";
}
BuildPipelineViewer();
EditorUtility.SetDirty(this);
AssetDatabase.SaveAssets();
return version;
@@ -197,22 +198,23 @@ namespace Stary.Evo.Editor
if (_viewers.ContainsKey(selectedBuildPipelines))
{
viewer = _viewers[selectedBuildPipelines];
viewer.SetBuildPackageData(packageName, selectedBuildPipelines.ToString(), packageVersion);
}
else
{
switch (selectedBuildPipelines)
{
case EBuildPipeline.EditorSimulateBuildPipeline:
viewer = new SimulateBuildPipelineViewer(this);
viewer = new SimulateBuildPipelineViewer(packageName, selectedBuildPipelines.ToString(), packageVersion);
break;
case EBuildPipeline.BuiltinBuildPipeline:
viewer = new BuiltinBuildPipelineViewer(this);
viewer = new BuiltinBuildPipelineViewer(packageName, selectedBuildPipelines.ToString(), packageVersion);
break;
case EBuildPipeline.ScriptableBuildPipeline:
viewer = new ScriptableBuildPipelineViewer(this);
viewer = new ScriptableBuildPipelineViewer(packageName, selectedBuildPipelines.ToString(), packageVersion);
break;
case EBuildPipeline.RawFileBuildPipeline:
viewer = new RawfileBuildpipelineViewer(this);
viewer = new RawfileBuildpipelineViewer(packageName, selectedBuildPipelines.ToString(), packageVersion);
break;
}

View File

@@ -31,7 +31,7 @@ namespace Stary.Evo.Editor
public static OdinEditorWindow window;
private HotfixMainResDomain hotfixMainResDomain;
[MenuItem("Evo/资源打包工具")]
[MenuItem("Evo/Dev/资源打包工具")]
static void ShowWindows()
{
#if NotUpdate
@@ -177,7 +177,7 @@ namespace Stary.Evo.Editor
[HorizontalGroup("Build/BuildPipeline"), HideLabel]
public string buildTarget;
public static string packageName;
private static string packageName;
#region HyBridCLRBuild
@@ -204,7 +204,7 @@ namespace Stary.Evo.Editor
[Title("标记资源", titleAlignment: TitleAlignments.Centered)]
[HorizontalGroup("Build/HyBridClrBuildEntity"), HideLabel]
public BuildAssetEntity markAssetEntity =
new BuildAssetEntity("MarkAsset", "MarkAsset", MarkAdressable.AddMark);
new BuildAssetEntity("MarkAsset", "MarkAsset", MarkAdressable.AddDomainMark);
#endregion
@@ -230,7 +230,7 @@ namespace Stary.Evo.Editor
if (selectedPackageNames.IsNullOrEmpty())
{
// string buildPackageName = DataSetting.packageName;
// string buildPackageName = packageName;
// if (result.Exists(p => p == buildPackageName))
// {
// selectedPackageNames = buildPackageName;
@@ -548,7 +548,6 @@ namespace Stary.Evo.Editor
}
GUILayout.EndScrollView();
BuildServerPath();
UpdateBuildPipelineButtonName();
}
@@ -558,30 +557,7 @@ namespace Stary.Evo.Editor
onUpdateBuildPipelineEntity.SetButtonName($"更新至服务器【版本:{BuildAssetDataSetting.packageVersion}】");
}
/// <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}】");
}
}
public enum BuildAssetType
{
Login,
Build,
}
}

View File

@@ -7,30 +7,36 @@ using YooAsset.Editor;
namespace Stary.Evo.Editor
{
[Serializable]
public class BuiltinBuildPipelineViewer :AbstractBuildPipelineViewer
public class BuiltinBuildPipelineViewer : AbstractBuildPipelineViewer
{
public BuiltinBuildPipelineViewer(BuildAssetDataSetting packageName) : base(packageName)
public BuiltinBuildPipelineViewer(string packageName, string selectedBuildPipelines, string packageVersion) :
base(packageName, selectedBuildPipelines, packageVersion)
{
// isSimulate = false;
// isSimulate = false;
}
public override void ExecuteBuild()
{
var fileNameStyle = AssetBundleBuilderSetting.GetPackageFileNameStyle(dataSetting.packageName, dataSetting.selectedBuildPipelines.ToString());
var buildinFileCopyOption = AssetBundleBuilderSetting.GetPackageBuildinFileCopyOption(dataSetting.packageName, dataSetting.selectedBuildPipelines.ToString());
var buildinFileCopyParams = AssetBundleBuilderSetting.GetPackageBuildinFileCopyParams(dataSetting.packageName, dataSetting.selectedBuildPipelines.ToString());
var compressOption = AssetBundleBuilderSetting.GetPackageCompressOption(dataSetting.packageName, dataSetting.selectedBuildPipelines.ToString());
var clearBuildCache = AssetBundleBuilderSetting.GetPackageClearBuildCache(dataSetting.packageName, dataSetting.selectedBuildPipelines.ToString());
var useAssetDependencyDB = AssetBundleBuilderSetting.GetPackageUseAssetDependencyDB(dataSetting.packageName, dataSetting.selectedBuildPipelines.ToString());
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 = dataSetting.selectedBuildPipelines.ToString();
buildParameters.BuildPipeline = selectedBuildPipelines.ToString();
buildParameters.BuildBundleType = (int)EBuildBundleType.AssetBundle;
buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget;
buildParameters.PackageName = dataSetting.packageName;
buildParameters.PackageVersion =dataSetting.GetBuildPackageVersion();
buildParameters.PackageName = packageName;
buildParameters.PackageVersion = packageVersion;
buildParameters.EnableSharePackRule = true;
buildParameters.VerifyBuildingResult = true;
buildParameters.FileNameStyle = fileNameStyle;
@@ -49,8 +55,6 @@ namespace Stary.Evo.Editor
//EditorUtility.RevealInFinder(buildResult.OutputPackageDirectory);
base.ExecuteBuild();
}
}
}
}

View File

@@ -16,7 +16,7 @@ namespace Stary.Evo.Editor
{
public class CreatAssetWindow : OdinEditorWindow
{
[MenuItem("Evo/创建Domain作用域")]
[MenuItem("Evo/Dev/创建Domain作用域")]
static void Init()
{
// Get existing open window or if none, make a new one:

View File

@@ -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)
{
BuildArtAssetWindow.RemoveBuildAssetWindow();
EditorFrameworkUtils.DeleteAllChild(domainPath, FileAttributes.Normal);
domainList.Clear();
AssetDatabase.Refresh();
AssetDatabase.SaveAssets();
}
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 6799dae03a614d0cbd6263333517b6af
timeCreated: 1761274861

View File

@@ -12,8 +12,15 @@ namespace Stary.Evo.Editor
[Serializable]
public class AbstractBuildPipelineViewer
{
protected BuildAssetDataSetting dataSetting;
//protected BuildAssetDataSetting dataSetting;
#region
protected string packageName;
protected string selectedBuildPipelines;
protected string packageVersion;
#endregion
// protected bool isSimulate;
// protected bool isRaw;
@@ -21,15 +28,15 @@ namespace Stary.Evo.Editor
[HorizontalGroup("BuildCache")]
[InfoBox("当不勾选此项的时候,引擎会开启增量打包模式,会极大提高构建速度!")]
[OnValueChanged("SetBuildCacheToggle")]
[HideIf("@ dataSetting.selectedBuildPipelines==EBuildPipeline.EditorSimulateBuildPipeline")]
[HideIf("@ selectedBuildPipelines==EBuildPipeline.EditorSimulateBuildPipeline.ToString()")]
public bool clearBuildCacheToggle;
[Title("依赖数据库", titleAlignment: TitleAlignments.Centered)]
[HorizontalGroup("BuildCache")]
[InfoBox("当开启此项的时候,会极大提高构建速度!")]
[OnValueChanged("SetUseAssetDependencyDB")]
[HideIf("@ dataSetting.selectedBuildPipelines==EBuildPipeline.EditorSimulateBuildPipeline")]
public bool useAssetDependencyDBToggle;
[HideIf("@ selectedBuildPipelines==EBuildPipeline.EditorSimulateBuildPipeline.ToString()")]
public bool useAssetDependencyDBToggle=true;
@@ -37,7 +44,7 @@ namespace Stary.Evo.Editor
[HorizontalGroup("BuildCache"), HideLabel]
[InfoBox("推荐LZ4压缩方式")]
[OnValueChanged("SetCompression")]
[HideIf("@ dataSetting.selectedBuildPipelines==EBuildPipeline.EditorSimulateBuildPipeline")]
[HideIf("@ selectedBuildPipelines==EBuildPipeline.EditorSimulateBuildPipeline.ToString()")]
public ECompressOption compression = ECompressOption.LZ4;
// [Title("资源包文件名称样式", titleAlignment: TitleAlignments.Centered)]
@@ -50,8 +57,8 @@ namespace Stary.Evo.Editor
[VerticalGroup("BuildCache/FileStyle"), HideLabel]
[InfoBox("资源拷贝方式是否拷贝StreamingAssets")]
[OnValueChanged("SetCopyBuildinFileOption")]
[HideIf("@ dataSetting.selectedBuildPipelines==EBuildPipeline.EditorSimulateBuildPipeline")]
public EBuildinFileCopyOption copyBuildinFileOption;
[HideIf("@ selectedBuildPipelines==EBuildPipeline.EditorSimulateBuildPipeline.ToString()")]
public EBuildinFileCopyOption copyBuildinFileOption = EBuildinFileCopyOption.ClearAndCopyAll;
[VerticalGroup("BuildCache/FileStyle"), HideLabel]
[OnValueChanged("SetCopyBuildinFileParams")]
@@ -59,9 +66,11 @@ namespace Stary.Evo.Editor
"@copyBuildinFileOption==EBuildinFileCopyOption.ClearAndCopyByTags||copyBuildinFileOption==EBuildinFileCopyOption.OnlyCopyByTags ")]
public string copyBuildinFileParams;
public AbstractBuildPipelineViewer(BuildAssetDataSetting dataSetting)
public AbstractBuildPipelineViewer(string packageName,string selectedBuildPipelines,string packageVersion)
{
this.dataSetting = dataSetting;
//this.dataSetting = dataSetting;
SetBuildPackageData(packageName,selectedBuildPipelines,packageVersion);
useAssetDependencyDBToggle = true;
SetUseAssetDependencyDB();
clearBuildCacheToggle = false;
@@ -74,26 +83,32 @@ namespace Stary.Evo.Editor
SetCopyBuildinFileOption();
}
public void SetBuildPackageData(string packageName,string selectedBuildPipelines,string packageVersion)
{
this.packageName = packageName;
this.selectedBuildPipelines = selectedBuildPipelines;
this.packageVersion = packageVersion;
}
#region AssetBuild
private void SetCompression()
{
AssetBundleBuilderSetting.SetPackageCompressOption(dataSetting.packageName, dataSetting.selectedBuildPipelines.ToString(),
AssetBundleBuilderSetting.SetPackageCompressOption(packageName, selectedBuildPipelines,
compression);
}
private void SetFileNameStyle()
{
AssetBundleBuilderSetting.SetPackageFileNameStyle(dataSetting.packageName, dataSetting.selectedBuildPipelines.ToString(),
AssetBundleBuilderSetting.SetPackageFileNameStyle(packageName, selectedBuildPipelines,
fileNameStyle);
}
private void SetCopyBuildinFileOption()
{
AssetBundleBuilderSetting.SetPackageBuildinFileCopyOption(dataSetting.packageName,
dataSetting.selectedBuildPipelines.ToString(), copyBuildinFileOption);
AssetBundleBuilderSetting.SetPackageBuildinFileCopyOption(packageName,
selectedBuildPipelines, copyBuildinFileOption);
//PlayerPrefs.SetInt("CopyBuildinFileOption", (int)copyBuildinFileOption);
}
@@ -101,21 +116,21 @@ namespace Stary.Evo.Editor
private void SetCopyBuildinFileParams()
{
AssetBundleBuilderSetting.SetPackageBuildinFileCopyParams(dataSetting.packageName,
dataSetting.selectedBuildPipelines.ToString(), copyBuildinFileParams);
AssetBundleBuilderSetting.SetPackageBuildinFileCopyParams(packageName,
selectedBuildPipelines, copyBuildinFileParams);
//PlayerPrefs.SetInt("CopyBuildinFileOption", (int)copyBuildinFileOption);
}
public void SetBuildCacheToggle()
{
AssetBundleBuilderSetting.SetPackageClearBuildCache(dataSetting.packageName, dataSetting.selectedBuildPipelines.ToString(),
AssetBundleBuilderSetting.SetPackageClearBuildCache(packageName, selectedBuildPipelines,
clearBuildCacheToggle);
}
private void SetUseAssetDependencyDB()
public void SetUseAssetDependencyDB()
{
AssetBundleBuilderSetting.SetPackageUseAssetDependencyDB(dataSetting.packageName, dataSetting.selectedBuildPipelines.ToString(),
AssetBundleBuilderSetting.SetPackageUseAssetDependencyDB(packageName, selectedBuildPipelines,
useAssetDependencyDBToggle);
}
@@ -139,8 +154,8 @@ namespace Stary.Evo.Editor
protected IEncryptionServices CreateEncryptionInstance()
{
var encyptionClassName =
AssetBundleBuilderSetting.GetPackageEncyptionServicesClassName(dataSetting.packageName,
dataSetting.selectedBuildPipelines.ToString());
AssetBundleBuilderSetting.GetPackageEncyptionServicesClassName(packageName,
selectedBuildPipelines);
var encryptionClassTypes = EditorTools.GetAssignableTypes(typeof(IEncryptionServices));
var classType = encryptionClassTypes.Find(x => x.FullName.Equals(encyptionClassName));
if (classType != null)

View File

@@ -15,7 +15,7 @@ namespace Stary.Evo.Editor
{
public class OneKeyBuildWindow : OdinEditorWindow
{
[MenuItem("Evo/(一键)打包工具")]
[MenuItem("Evo/Dev/(一键)打包工具")]
static void Init()
{
#if NotUpdate

View File

@@ -9,7 +9,8 @@ namespace Stary.Evo.Editor
[Serializable]
public class RawfileBuildpipelineViewer:AbstractBuildPipelineViewer
{
public RawfileBuildpipelineViewer(BuildAssetDataSetting packageName) : base(packageName)
public RawfileBuildpipelineViewer(string packageName, string selectedBuildPipelines, string packageVersion) :
base(packageName, selectedBuildPipelines, packageVersion)
{
// isSimulate = false;
// isRaw = true;
@@ -18,20 +19,20 @@ namespace Stary.Evo.Editor
public override void ExecuteBuild()
{
var fileNameStyle = AssetBundleBuilderSetting.GetPackageFileNameStyle(dataSetting.packageName, dataSetting.selectedBuildPipelines.ToString());
var buildinFileCopyOption = AssetBundleBuilderSetting.GetPackageBuildinFileCopyOption(dataSetting.packageName, dataSetting.selectedBuildPipelines.ToString());
var buildinFileCopyParams = AssetBundleBuilderSetting.GetPackageBuildinFileCopyParams(dataSetting.packageName, dataSetting.selectedBuildPipelines.ToString());
var clearBuildCache = AssetBundleBuilderSetting.GetPackageClearBuildCache(dataSetting.packageName, dataSetting.selectedBuildPipelines.ToString());
var useAssetDependencyDB = AssetBundleBuilderSetting.GetPackageUseAssetDependencyDB(dataSetting.packageName, dataSetting.selectedBuildPipelines.ToString());
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 = dataSetting.selectedBuildPipelines.ToString();
buildParameters.BuildPipeline = selectedBuildPipelines;
buildParameters.BuildBundleType = (int)EBuildBundleType.RawBundle;
buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget;
buildParameters.PackageName = dataSetting.packageName;
buildParameters.PackageVersion =dataSetting.GetBuildPackageVersion();
buildParameters.PackageName = packageName;
buildParameters.PackageVersion =packageVersion;
buildParameters.VerifyBuildingResult = true;
buildParameters.FileNameStyle = fileNameStyle;
buildParameters.BuildinFileCopyOption = buildinFileCopyOption;

View File

@@ -9,29 +9,30 @@ namespace Stary.Evo.Editor
[Serializable]
public class ScriptableBuildPipelineViewer:AbstractBuildPipelineViewer
{
public ScriptableBuildPipelineViewer(BuildAssetDataSetting packageName) : base(packageName)
public ScriptableBuildPipelineViewer(string packageName, string selectedBuildPipelines, string packageVersion) :
base(packageName, selectedBuildPipelines, packageVersion)
{
//isSimulate = false;
}
public override void ExecuteBuild()
{
var fileNameStyle = AssetBundleBuilderSetting.GetPackageFileNameStyle(dataSetting.packageName, dataSetting.selectedBuildPipelines.ToString());
var buildinFileCopyOption = AssetBundleBuilderSetting.GetPackageBuildinFileCopyOption(dataSetting.packageName, dataSetting.selectedBuildPipelines.ToString());
var buildinFileCopyParams = AssetBundleBuilderSetting.GetPackageBuildinFileCopyParams(dataSetting.packageName, dataSetting.selectedBuildPipelines.ToString());
var compressOption = AssetBundleBuilderSetting.GetPackageCompressOption(dataSetting.packageName, dataSetting.selectedBuildPipelines.ToString());
var clearBuildCache = AssetBundleBuilderSetting.GetPackageClearBuildCache(dataSetting.packageName, dataSetting.selectedBuildPipelines.ToString());
var useAssetDependencyDB = AssetBundleBuilderSetting.GetPackageUseAssetDependencyDB(dataSetting.packageName, dataSetting.selectedBuildPipelines.ToString());
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 = dataSetting.selectedBuildPipelines.ToString();
buildParameters.BuildPipeline = selectedBuildPipelines;
buildParameters.BuildBundleType = (int)EBuildBundleType.AssetBundle;
buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget;
buildParameters.PackageName = dataSetting.packageName;
buildParameters.PackageVersion = dataSetting.GetBuildPackageVersion();
buildParameters.PackageName = packageName;
buildParameters.PackageVersion = packageVersion;
buildParameters.EnableSharePackRule = true;
buildParameters.VerifyBuildingResult = true;
buildParameters.FileNameStyle = fileNameStyle;
@@ -63,7 +64,7 @@ namespace Stary.Evo.Editor
{
var uniqueBundleName = AssetBundleCollectorSettingData.Setting.UniqueBundleName;
var packRuleResult = DefaultPackRule.CreateShadersPackRuleResult();
return packRuleResult.GetBundleName(dataSetting.packageName, uniqueBundleName);
return packRuleResult.GetBundleName(packageName, uniqueBundleName);
}
}
}

View File

@@ -8,25 +8,25 @@ namespace Stary.Evo.Editor
[Serializable]
public class SimulateBuildPipelineViewer:AbstractBuildPipelineViewer
{
public SimulateBuildPipelineViewer(BuildAssetDataSetting packageName) : base(packageName)
public SimulateBuildPipelineViewer(string packageName, string selectedBuildPipelines, string packageVersion) : base(packageName, selectedBuildPipelines, packageVersion)
{
//isSimulate = true;
}
public override void ExecuteBuild()
{
var fileNameStyle = AssetBundleBuilderSetting.GetPackageFileNameStyle(dataSetting.packageName, dataSetting.selectedBuildPipelines.ToString());
var buildinFileCopyOption = AssetBundleBuilderSetting.GetPackageBuildinFileCopyOption(dataSetting.packageName, dataSetting.selectedBuildPipelines.ToString());
var buildinFileCopyParams = AssetBundleBuilderSetting.GetPackageBuildinFileCopyParams(dataSetting.packageName, dataSetting.selectedBuildPipelines.ToString());
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 = dataSetting.selectedBuildPipelines.ToString();
buildParameters.BuildPipeline = selectedBuildPipelines;
buildParameters.BuildBundleType = (int)EBuildBundleType.VirtualBundle;
buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget;
buildParameters.PackageName = dataSetting.packageName;
buildParameters.PackageVersion = dataSetting.GetBuildPackageVersion();
buildParameters.PackageName = packageName;
buildParameters.PackageVersion = packageVersion;
buildParameters.VerifyBuildingResult = true;
buildParameters.FileNameStyle = fileNameStyle;
buildParameters.BuildinFileCopyOption = buildinFileCopyOption;

View File

@@ -24,7 +24,10 @@ namespace Stary.Evo.Editor
{
get { return Application.dataPath + "/Domain"; }
}
public static string ArtRoot
{
get { return Application.dataPath + "/Art"; }
}
//[MenuItem("Evo/Hotfix/Addressable")]
public static void AddHotfixAddressableDll()
@@ -134,7 +137,7 @@ namespace Stary.Evo.Editor
{
YooAsset.Editor.AssetBundleCollectorSettingData.RemovePackage(assetBundleCollectorPackage);
}
Mark();
MarkDomain();
CreateRes(_packageName,
$"{DomainRoot}/{oneKeyBUildEntity.DomainName}/AddressableRes",
@@ -145,8 +148,26 @@ namespace Stary.Evo.Editor
}
}
//[MenuItem("Evo/Hotfix/标记资源")]
public static void AddMark()
public static void AddArtMark(Action complete)
{
_packageName = BuildArtAssetWindow.GetBuildPackageName();
AssetBundleCollectorPackage assetBundleCollectorPackage = null;
foreach (var package in AssetBundleCollectorSettingData.Setting.Packages)
{
if (package.PackageName ==_packageName)
{
assetBundleCollectorPackage = package;
}
}
if (assetBundleCollectorPackage != null)
{
YooAsset.Editor.AssetBundleCollectorSettingData.RemovePackage(assetBundleCollectorPackage);
}
MarkArt();
CollectSVC(ArtRoot, _packageName,complete);
}
public static void AddDomainMark()
{
// //清空主包旧数据
AssetBundleCollectorPackage assetBundleCollectorPackage = null;
@@ -173,14 +194,16 @@ namespace Stary.Evo.Editor
DomainConfig domainConfig =
AssetDatabase.LoadAssetAtPath<DomainConfig>(configPath);
_packageName = domainConfig.domain;
Mark();
MarkDomain();
CreateRes(_packageName,
$"{DomainRoot}/{BuildAssetWindow.GetBuildPackageName()}/AddressableRes",
$"{DomainRoot}/{BuildAssetWindow.GetBuildPackageName()}/HotUpdate");
CollectSVC(BuildAssetWindow.GetBuildPackageName());
EditorUtility.DisplayDialog("自动标记", "自动标记成功", "确定");
CollectSVC(DomainRoot,BuildAssetWindow.GetBuildPackageName(),()=>
{
EditorUtility.DisplayDialog("自动标记", "自动标记成功", "确定");
});
}
@@ -198,7 +221,61 @@ namespace Stary.Evo.Editor
public static Dictionary<string, AssetBundleCollectorGroup> collectorGroupDic =
new Dictionary<string, AssetBundleCollectorGroup>();
public static void Mark()
public static void MarkArt()
{
addressDic.Clear();
collectorGroupDic.Clear();
///创建分组
string remotedRoot = $"{ArtRoot}/{_packageName}";
DirectoryInfo[] dirs = new DirectoryInfo(remotedRoot).GetDirectories();
var setting = YooAsset.Editor.AssetBundleCollectorSettingData.Setting;
setting.ShowPackageView = true;
setting.UniqueBundleName = true;
//创建Package文件
package = YooAsset.Editor.AssetBundleCollectorSettingData.CreatePackage(_packageName);
//检测Packages是否存在TestPackage
package.PackageName = _packageName;
package.EnableAddressable = true;
package.IncludeAssetGUID = true;
package.AutoCollectShaders = true;
package.IgnoreRuleName = "NormalIgnoreRule";
//检测Packages是否存在Group
foreach (var info in dirs)
{
string groupName = info.Name;
if (info.Name == "Scenes")
{
AssetBundleCollectorGroup collectorGroup =
YooAsset.Editor.AssetBundleCollectorSettingData.CreateGroup(package, groupName);
collectorGroup.AssetTags = groupName;
if (!collectorGroupDic.ContainsKey(groupName))
{
collectorGroupDic.Add(groupName, collectorGroup);
}
else
{
Debug.LogError("分组 " + groupName + "已存在,请检查资源目录,避免重复");
}
AutoMarkRootAddress(info);
break;
}
}
// AssetDatabase.SaveAssets();
// AssetDatabase.Refresh();
MarkStatus();
YooAsset.Editor.AssetBundleCollectorSettingData.SaveFile();
// CreateRes();
Debug.Log("MarkAsset Successful");
}
public static void MarkDomain()
{
addressDic.Clear();
collectorGroupDic.Clear();
@@ -485,9 +562,9 @@ namespace Stary.Evo.Editor
}
}
public static void CollectSVC(string packageName)
public static void CollectSVC(string root,string packageName,Action complete)
{
string remotedRoot = $"{DomainRoot}/{packageName}/ShaderVariants";
string remotedRoot = $"{root}/{packageName}/ShaderVariants";
string remotedRootFileName = $"{remotedRoot}/{packageName}.shadervariants";
if (!Directory.Exists(remotedRoot))
{
@@ -509,6 +586,8 @@ namespace Stary.Evo.Editor
$"UnityEvo:【{packageName}】VariantCount : {collection.variantCount}");
CreateShaderVariantsGroup(packageName, localSavePath);
complete?.Invoke();
}
else
{

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 6db9ac74e11743f88b708a1018685c93
timeCreated: 1761199081

View File

@@ -0,0 +1,8 @@
namespace Stary.Evo
{
public enum BuildAssetType
{
Login,
Build,
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 7153744cd9354cff92f319655857379f
timeCreated: 1761199110

View File

@@ -1,6 +1,6 @@
{
"name": "com.staryevo.main",
"version": "2.0.13",
"version": "2.0.14",
"displayName": "00.StaryEvo",
"description": "This is an Framework package(后台服务器版本端口9527)",
"unity": "2021.3",

View File

@@ -25,7 +25,7 @@ namespace Stary.Evo
/// </summary>
private static GameObject _MainBaseModel;
/// <summary>
/// 赋值默认的实例

View File

@@ -16,7 +16,8 @@ namespace Stary.Evo
{
private DomainConfig.LoadResType loadResType;
public GameObject mainPrefab;
private DomainConfig domainConfig;
private DomainConfig domainConfig;
public LoadResState(IFsmSystemAsync system) : base(system)
{
}
@@ -39,42 +40,33 @@ namespace Stary.Evo
loadResType = domainConfig.loadResType;
Type type = param2 as Type;
var package = YooAssets.GetPackage(domainConfig.domain);
if (loadResType == DomainConfig.LoadResType.Prefab)
switch (loadResType)
{
// 加载热更资源
var loadOperation = package.LoadAssetAsync<GameObject>(domainConfig.mainPrefab);
case DomainConfig.LoadResType.Prefab:
await loadOperation;
if (loadOperation.Status == EOperationStatus.Succeed)
{
LoadDomainPrefab(package);
#if Immersal
ARSpace arSpace = GameObject.FindObjectOfType<ARSpace>();
if (arSpace != null)
break;
case DomainConfig.LoadResType.Scene:
var sceneMode = domainConfig.loadSceneMode;
var physicsMode = LocalPhysicsMode.None;
SceneHandle handle = package.LoadSceneAsync(domainConfig.mainScene, sceneMode, physicsMode);
await handle;
Scene targetScene = SceneManager.GetSceneByName(domainConfig.mainScene);
targetScene.name = domainConfig.mainScene;
// 设置为 active scene 或者后续 Move 到该 scene
SceneManager.SetActiveScene(targetScene);
mainPrefab = GameObject.Find(domainConfig.mainPrefab);
if (mainPrefab == null)
{
Debug.Log("UnityEvo:找到ARSpace开始加载点云运行环境...");
mainPrefab = loadOperation.InstantiateSync(arSpace.transform);
} else
{
Debug.Log("UnityEvo:未找到ARSpace开始加载普通运行环境通过语音唤醒...");
mainPrefab = loadOperation.InstantiateSync();
LoadDomainPrefab(package);
}
#elif NotPointClond
mainPrefab = loadOperation.InstantiateSync();
#endif
if(domainConfig.domain =="Main")
AppConfig.SetDefaultMainInstance(mainPrefab);
}
}
else if (loadResType == DomainConfig.LoadResType.Scene)
{
var sceneMode = domainConfig.loadSceneMode;
var physicsMode = LocalPhysicsMode.None;
SceneHandle handle = package.LoadSceneAsync(domainConfig.mainScene, sceneMode, physicsMode);
await handle;
mainPrefab = GameObject.Find(domainConfig.mainPrefab);
break;
}
LocalTransformInfo info = mainPrefab.GetOrAddComponent<LocalTransformInfo>();
FsmLoadSystem fsmLoadSystem = FsmSystem as FsmLoadSystem;
@@ -93,10 +85,11 @@ namespace Stary.Evo
info.transform.position = fsmLoadSystem.GetTransformCtor().position;
info.transform.rotation = Quaternion.Euler(fsmLoadSystem.GetTransformCtor().rotation);
info.transform.localScale = fsmLoadSystem.GetTransformCtor().scale;
}else{
info.Switch(0);
}
else
{
info.Switch(0);
}
}
else
{
@@ -130,6 +123,32 @@ namespace Stary.Evo
base.OnUpdate();
}
private async void LoadDomainPrefab(ResourcePackage package)
{
// 加载热更资源
var loadOperation = package.LoadAssetAsync<GameObject>(domainConfig.mainPrefab);
await loadOperation;
if (loadOperation.Status == EOperationStatus.Succeed)
{
#if Immersal
ARSpace arSpace = GameObject.FindObjectOfType<ARSpace>();
if (arSpace != null)
{
Debug.Log("UnityEvo:找到ARSpace开始加载点云运行环境...");
mainPrefab = loadOperation.InstantiateSync(arSpace.transform);
} else
{
Debug.Log("UnityEvo:未找到ARSpace开始加载普通运行环境通过语音唤醒...");
mainPrefab = loadOperation.InstantiateSync();
}
#elif NotPointClond
mainPrefab = loadOperation.InstantiateSync();
#endif
if (domainConfig.domain == "Main")
AppConfig.SetDefaultMainInstance(mainPrefab);
}
}
public override async UniTask OnExitAsync()
{
@@ -149,7 +168,7 @@ namespace Stary.Evo
if (loadResType == DomainConfig.LoadResType.Scene)
{
await SceneManager.UnloadSceneAsync("server");
await SceneManager.UnloadSceneAsync(domainConfig.mainScene);
}
if (domainBase != null)
@@ -158,7 +177,6 @@ namespace Stary.Evo
await ForceUnloadAllAssets(domainBase.DomainName);
}
}
}

View File

@@ -58,17 +58,12 @@ namespace Stary.Evo
// 初始化资源包
#if EDITOR_SIMULATEMODE
await EDITOR_SIMULATEMODE(package);
FsmSystem.SetCurState(nameof(ResUpdateServerState));
FsmSystem.SetCurState(nameof(ResUpdateServerState));
#elif OFFLINE_PLAYMODE
await OFFLINE_PLAYMODE(package);
FsmSystem.SetCurState(nameof(ResUpdateLocalState));
#elif HOST_PLAYMODE
// if (package.PackageName.Equals("Main"))
// {
// await OFFLINE_PLAYMODE(package);
// }
// else
// {
//登录
string url = AppConfig.IpConfig + "/Authentication/login";
bool isLogin = await WebRequestSystem.Login(url, AppConfig.UserName, AppConfig.PassWord);
@@ -76,7 +71,7 @@ namespace Stary.Evo
await HOST_PLAYMODE(package);
else
await Chche_PLAYMODE(package);
// }
FsmSystem.SetCurState(nameof(ResUpdateLocalState));
@@ -125,6 +120,7 @@ namespace Stary.Evo
private async UniTask EDITOR_SIMULATEMODE(ResourcePackage package)
{
var initParams=YooAssetFileSystem.EditorSimulateInitializeParameter(package.PackageName);
var initialization = package.InitializeAsync(initParams);
await initialization;

View File

@@ -67,8 +67,14 @@ namespace Stary.Evo
{
this.domain = domain;
_fsmSystem.SetOpenDomainType(openDomainType);
AppConfig.PackageDomainName = domain;
_fsmSystem.SetCurState(nameof(ResStartState));
if (this.domain != AppConfig.PackageDomainName)
{
AppConfig.PackageDomainName = domain;
_fsmSystem.SetCurState(nameof(ResStartState));
}
else
{
}
}
public void OpenDomain(string domain, TransformCtor transformCtor)
@@ -76,8 +82,14 @@ namespace Stary.Evo
this.domain = domain;
_fsmSystem.SetOpenDomainType(OpenDomainType.ImageTracked);
_fsmSystem.SetTransformCtor(transformCtor);
AppConfig.PackageDomainName = domain;
_fsmSystem.SetCurState(nameof(ResStartState));
if (this.domain != AppConfig.PackageDomainName)
{
AppConfig.PackageDomainName = domain;
_fsmSystem.SetCurState(nameof(ResStartState));
}
else
{
}
}
public void OpenDomain(string domain, Transform transform)
@@ -85,8 +97,14 @@ namespace Stary.Evo
this.domain = domain;
_fsmSystem.SetOpenDomainType(OpenDomainType.ImageTracked);
_fsmSystem.SetTransformCtor(transform);
AppConfig.PackageDomainName = domain;
_fsmSystem.SetCurState(nameof(ResStartState));
if (this.domain != AppConfig.PackageDomainName)
{
AppConfig.PackageDomainName = domain;
_fsmSystem.SetCurState(nameof(ResStartState));
}
else
{
}
}
public void CloseDomain()

View File

@@ -1,6 +1,6 @@
{
"name": "com.staryevo.tools",
"version": "1.1.4",
"version": "1.1.5",
"displayName": "00.StaryEvo.Tools",
"description": "This is an Framework package(后台服务器版本端口9527)",
"unity": "2021.3",