From ae6e7c804bb0e0545ea26866b63722be0acfe23e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BC=A0=E9=93=AE?= <834207172@qq.com>
Date: Fri, 24 Oct 2025 19:08:10 +0800
Subject: [PATCH] =?UTF-8?q?=E3=80=90m=E3=80=91=E4=BF=AE=E6=94=B9=E6=A1=86?=
=?UTF-8?q?=E6=9E=B6=E7=B7=A8=E8=BC=AF=E5=99=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Editor/ArtBuild/ArtSceneDataEditor.cs | 39 ++++++++++++++++++
.../ArtBuild/ArtSceneDataEditor.cs.meta | 3 ++
.../Editor/ArtBuild/BuildArtAssetWindow.cs | 2 +-
.../Editor/ArtBuild/CreatArtAssetWindow.cs | 2 +-
.../Editor/Build/BuildApkWindow.cs | 2 +-
.../Editor/BuildAsset/BuildAssetWindow.cs | 2 +-
.../Editor/BuildAsset/CreatAssetWindow.cs | 2 +-
.../Editor/BuildAsset/OneKeyBuildWindow.cs | 2 +-
.../Runtime/PlayerSettings/ArtSceneData.cs | 41 +++++++++++++++++++
.../PlayerSettings/ArtSceneData.cs.meta | 3 ++
.../Runtime/PlayerSettings/DomainConfig.cs | 25 ++++++++++-
.../Runtime/HybridLoad/Fsm/LoadResState.cs | 2 +-
12 files changed, 116 insertions(+), 9 deletions(-)
create mode 100644 Assets/00.StaryEvo/Editor/ArtBuild/ArtSceneDataEditor.cs
create mode 100644 Assets/00.StaryEvo/Editor/ArtBuild/ArtSceneDataEditor.cs.meta
create mode 100644 Assets/00.StaryEvo/Runtime/PlayerSettings/ArtSceneData.cs
create mode 100644 Assets/00.StaryEvo/Runtime/PlayerSettings/ArtSceneData.cs.meta
diff --git a/Assets/00.StaryEvo/Editor/ArtBuild/ArtSceneDataEditor.cs b/Assets/00.StaryEvo/Editor/ArtBuild/ArtSceneDataEditor.cs
new file mode 100644
index 0000000..3b61c14
--- /dev/null
+++ b/Assets/00.StaryEvo/Editor/ArtBuild/ArtSceneDataEditor.cs
@@ -0,0 +1,39 @@
+using System.Collections;
+using System.Collections.Generic;
+using Sirenix.OdinInspector.Editor;
+using Stary.Evo;
+using Stary.Evo.Editor;
+using UnityEditor;
+using UnityEngine;
+
+namespace Stary.Evo.Editor
+{
+ [CustomEditor(typeof(ArtSceneData))]
+ public class ArtSceneDataEditor : OdinEditor
+ {
+ // ///
+ // /// 序列化属性,在OnEnable中获取
+ // ///
+ // [HideInInspector] private SerializedProperty artScenes;
+ private void OnEnable()
+ {
+ //artScenes = serializedObject.FindProperty("artScenes");
+ ArtSceneData artSceneData = (ArtSceneData)target;
+ List artScenesList = artSceneData.artScenes;
+ List removeIndexList = new List();
+ for (int i = 0; i < artScenesList.Count; i++)
+ {
+ ArtScene artScene = artScenesList[i];
+ if (artScene.sceneAsset==null)
+ {
+ removeIndexList.Add(i);
+ }
+ }
+ for (int i = removeIndexList.Count - 1; i >= 0; i--)
+ {
+ int index = removeIndexList[i];
+ artScenesList.RemoveAt(index);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/00.StaryEvo/Editor/ArtBuild/ArtSceneDataEditor.cs.meta b/Assets/00.StaryEvo/Editor/ArtBuild/ArtSceneDataEditor.cs.meta
new file mode 100644
index 0000000..b023187
--- /dev/null
+++ b/Assets/00.StaryEvo/Editor/ArtBuild/ArtSceneDataEditor.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 5762b2ce1b7e4184afd8785c147d42da
+timeCreated: 1761301851
\ No newline at end of file
diff --git a/Assets/00.StaryEvo/Editor/ArtBuild/BuildArtAssetWindow.cs b/Assets/00.StaryEvo/Editor/ArtBuild/BuildArtAssetWindow.cs
index d00ed59..7af432c 100644
--- a/Assets/00.StaryEvo/Editor/ArtBuild/BuildArtAssetWindow.cs
+++ b/Assets/00.StaryEvo/Editor/ArtBuild/BuildArtAssetWindow.cs
@@ -27,7 +27,7 @@ namespace Stary.Evo.Editor
public static OdinEditorWindow window;
private HotfixMainResDomain hotfixMainResDomain;
- [MenuItem("Evo/Art/Art资源打包工具")]
+ [MenuItem("Evo/Art/Art资源打包工具",false, 1)]
static void ShowWindows()
{
if (CreatAssetWindow.GetCreatDomainAll().Count <= 0)
diff --git a/Assets/00.StaryEvo/Editor/ArtBuild/CreatArtAssetWindow.cs b/Assets/00.StaryEvo/Editor/ArtBuild/CreatArtAssetWindow.cs
index a401158..506cb88 100644
--- a/Assets/00.StaryEvo/Editor/ArtBuild/CreatArtAssetWindow.cs
+++ b/Assets/00.StaryEvo/Editor/ArtBuild/CreatArtAssetWindow.cs
@@ -16,7 +16,7 @@ namespace Stary.Evo.Editor
{
public class CreatArtAssetWindow : OdinEditorWindow
{
- [MenuItem("Evo/Art/创建Art作用域")]
+ [MenuItem("Evo/Art/创建Art作用域",false, 0)]
static void Init()
{
// Get existing open window or if none, make a new one:
diff --git a/Assets/00.StaryEvo/Editor/Build/BuildApkWindow.cs b/Assets/00.StaryEvo/Editor/Build/BuildApkWindow.cs
index f544664..84609d8 100644
--- a/Assets/00.StaryEvo/Editor/Build/BuildApkWindow.cs
+++ b/Assets/00.StaryEvo/Editor/Build/BuildApkWindow.cs
@@ -10,7 +10,7 @@ namespace Stary.Evo.Editor
{
public static OdinEditorWindow window;
- [MenuItem("Evo/Dev/Apk打包工具")]
+ [MenuItem("Evo/Dev/Apk打包工具",false, 4)]
static void ShowWindows()
{
window = (BuildApkWindow)EditorWindow.GetWindow(typeof(BuildApkWindow));
diff --git a/Assets/00.StaryEvo/Editor/BuildAsset/BuildAssetWindow.cs b/Assets/00.StaryEvo/Editor/BuildAsset/BuildAssetWindow.cs
index c8a93f7..1bb0a54 100644
--- a/Assets/00.StaryEvo/Editor/BuildAsset/BuildAssetWindow.cs
+++ b/Assets/00.StaryEvo/Editor/BuildAsset/BuildAssetWindow.cs
@@ -31,7 +31,7 @@ namespace Stary.Evo.Editor
public static OdinEditorWindow window;
private HotfixMainResDomain hotfixMainResDomain;
- [MenuItem("Evo/Dev/资源打包工具")]
+ [MenuItem("Evo/Dev/资源打包工具",false, 2)]
static void ShowWindows()
{
#if NotUpdate
diff --git a/Assets/00.StaryEvo/Editor/BuildAsset/CreatAssetWindow.cs b/Assets/00.StaryEvo/Editor/BuildAsset/CreatAssetWindow.cs
index 0a04d8a..5735dea 100644
--- a/Assets/00.StaryEvo/Editor/BuildAsset/CreatAssetWindow.cs
+++ b/Assets/00.StaryEvo/Editor/BuildAsset/CreatAssetWindow.cs
@@ -16,7 +16,7 @@ namespace Stary.Evo.Editor
{
public class CreatAssetWindow : OdinEditorWindow
{
- [MenuItem("Evo/Dev/创建Domain作用域")]
+ [MenuItem("Evo/Dev/创建Domain作用域",false, 1)]
static void Init()
{
// Get existing open window or if none, make a new one:
diff --git a/Assets/00.StaryEvo/Editor/BuildAsset/OneKeyBuildWindow.cs b/Assets/00.StaryEvo/Editor/BuildAsset/OneKeyBuildWindow.cs
index 9d67dd3..9d80c13 100644
--- a/Assets/00.StaryEvo/Editor/BuildAsset/OneKeyBuildWindow.cs
+++ b/Assets/00.StaryEvo/Editor/BuildAsset/OneKeyBuildWindow.cs
@@ -15,7 +15,7 @@ namespace Stary.Evo.Editor
{
public class OneKeyBuildWindow : OdinEditorWindow
{
- [MenuItem("Evo/Dev/(一键)打包工具")]
+ [MenuItem("Evo/Dev/(一键)打包工具",false, 3)]
static void Init()
{
#if NotUpdate
diff --git a/Assets/00.StaryEvo/Runtime/PlayerSettings/ArtSceneData.cs b/Assets/00.StaryEvo/Runtime/PlayerSettings/ArtSceneData.cs
new file mode 100644
index 0000000..168eb58
--- /dev/null
+++ b/Assets/00.StaryEvo/Runtime/PlayerSettings/ArtSceneData.cs
@@ -0,0 +1,41 @@
+using System.Collections.Generic;
+using Sirenix.OdinInspector;
+using UnityEditor;
+using UnityEngine;
+
+namespace Stary.Evo.Editor
+{
+ [CreateAssetMenu(fileName = "ArtSceneData", menuName = "Evo/ArtSceneData")]
+ public class ArtSceneData : ScriptableObject
+ {
+ [ListDrawerSettings(DraggableItems = false, ShowFoldout = false, ShowPaging = false, ShowItemCount = false)]
+ public List artScenes = new List();
+
+
+ }
+
+ [System.Serializable]
+ public class ArtScene
+ {
+ [LabelText("场景名称")]
+ public string sceneName;
+#if UNITY_EDITOR
+ [LabelText("场景实例")][OnValueChanged("LoadScenePath")]
+ public SceneAsset sceneAsset;
+#endif
+ [LabelText("场景路径")][ReadOnly]
+ public string scenePath;
+ [LabelText("场景标识符")][ReadOnly]
+ public string sceneIdentifier;
+ public void LoadScenePath()
+ {
+ if (sceneAsset == null)
+ {
+ Debug.LogError($"ArtScene {sceneName} 资源不存在,请检查!");
+ return;
+ }
+ scenePath = AssetDatabase.GetAssetPath(sceneAsset);
+ sceneIdentifier= $"Scenes_{sceneAsset.name}" ;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/00.StaryEvo/Runtime/PlayerSettings/ArtSceneData.cs.meta b/Assets/00.StaryEvo/Runtime/PlayerSettings/ArtSceneData.cs.meta
new file mode 100644
index 0000000..7765a32
--- /dev/null
+++ b/Assets/00.StaryEvo/Runtime/PlayerSettings/ArtSceneData.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 4b27116732b54ea498248a5e81c5d0a3
+timeCreated: 1761299598
\ No newline at end of file
diff --git a/Assets/00.StaryEvo/Runtime/PlayerSettings/DomainConfig.cs b/Assets/00.StaryEvo/Runtime/PlayerSettings/DomainConfig.cs
index 2acbff9..69310d2 100644
--- a/Assets/00.StaryEvo/Runtime/PlayerSettings/DomainConfig.cs
+++ b/Assets/00.StaryEvo/Runtime/PlayerSettings/DomainConfig.cs
@@ -1,7 +1,9 @@
using System;
using Sirenix.OdinInspector;
+using UnityEditor;
using UnityEngine;
using UnityEngine.SceneManagement;
+using UnityEngine.Serialization;
namespace Stary.Evo
{
@@ -35,10 +37,29 @@ namespace Stary.Evo
///
public string mainPrefab;
- [ShowIf("loadResType", LoadResType.Scene)]
- public string mainScene;
+#if UNITY_EDITOR
+ [ShowIf("loadResType", LoadResType.Scene)][OnValueChanged("LoadScenePath")]
+ public SceneAsset sceneAsset;
+#endif
+ [ShowIf("loadResType", LoadResType.Scene)][ReadOnly]
+ public string scenePath;
+
+ [ShowIf("loadResType", LoadResType.Scene)][ReadOnly]
+ public string sceneIdentifier;
[ShowIf("loadResType", LoadResType.Scene)]
public LoadSceneMode loadSceneMode;
+
+
+ public void LoadScenePath()
+ {
+ if (sceneAsset == null)
+ {
+ Debug.LogError($"Scene {scenePath} 资源不存在,请检查!");
+ return;
+ }
+ scenePath = AssetDatabase.GetAssetPath(sceneAsset);
+ sceneIdentifier= $"Scenes_{sceneAsset.name}" ;
+ }
public enum LoadResType
{
Prefab,
diff --git a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/LoadResState.cs b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/LoadResState.cs
index d2b7766..33bc48f 100644
--- a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/LoadResState.cs
+++ b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/LoadResState.cs
@@ -53,7 +53,7 @@ namespace Stary.Evo
var sceneMode = domainConfig.loadSceneMode;
var physicsMode = LocalPhysicsMode.None;
- SceneHandle handle = package.LoadSceneAsync(domainConfig.mainScene, sceneMode, physicsMode);
+ SceneHandle handle = package.LoadSceneAsync(domainConfig.sceneIdentifier, sceneMode, physicsMode);
await handle;
Scene targetScene = SceneManager.GetSceneByName(handle.SceneName);