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);