From 7af759cfd8cae024fb4df4972dcfb15b041fa106 Mon Sep 17 00:00:00 2001 From: Weicao-CatilGrass <1992414357@qq.com> Date: Sat, 30 May 2026 20:02:00 +0800 Subject: 完成了动态场景加载 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Scripts/FragmentManager.cs | 10 ++++++++++ Assets/Scripts/FragmentRequire.cs | 3 ++- Assets/Scripts/PlayerPosition.cs | 4 +++- 3 files changed, 15 insertions(+), 2 deletions(-) (limited to 'Assets/Scripts') diff --git a/Assets/Scripts/FragmentManager.cs b/Assets/Scripts/FragmentManager.cs index 3bac110..74e5a58 100644 --- a/Assets/Scripts/FragmentManager.cs +++ b/Assets/Scripts/FragmentManager.cs @@ -6,6 +6,14 @@ public class FragmentManager : MonoBehaviour { private static readonly HashSet LoadedSceneNames = new(); + // 关键:在每次进入 Play Mode(且不重启域)时,重置静态集合 + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + private static void ResetStaticState() + { + LoadedSceneNames.Clear(); + // 如果有其他静态字段,也在这里一并重置 + } + /// /// 刷新场景需要列表(基于场景名称) /// @@ -91,6 +99,7 @@ public class FragmentManager : MonoBehaviour { foreach (var sceneName in sceneNames) { + Debug.Log("Unloading: " + sceneName); var asyncOp = SceneManager.UnloadSceneAsync(sceneName); if (asyncOp != null) { @@ -115,6 +124,7 @@ public class FragmentManager : MonoBehaviour { foreach (var sceneName in sceneNames) { + Debug.Log("Loading: " + sceneName); var asyncOp = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); if (asyncOp != null) { diff --git a/Assets/Scripts/FragmentRequire.cs b/Assets/Scripts/FragmentRequire.cs index 71ce602..cfe4120 100644 --- a/Assets/Scripts/FragmentRequire.cs +++ b/Assets/Scripts/FragmentRequire.cs @@ -20,6 +20,7 @@ public class FragmentRequire : MonoBehaviour private void OnTriggerEnter(Collider other) { + Debug.Log("Sync!"); var sceneName = new List(); foreach (SceneAsset sceneAsset in requiredScenes) sceneName.Add(sceneAsset.name); @@ -39,7 +40,7 @@ public class FragmentRequire : MonoBehaviour var ts = Vector3.one; var size = new Vector3(cs.x * ts.x, cs.y * ts.y, cs.z * ts.z); - Gizmos.color = new Color(1f, 0.18f, 0.29f, 0.5f); + Gizmos.color = new Color(1f, 0.18f, 0.29f, 0.25f); Gizmos.matrix = transform.localToWorldMatrix; Gizmos.DrawCube(_boxCollider.center, size); } diff --git a/Assets/Scripts/PlayerPosition.cs b/Assets/Scripts/PlayerPosition.cs index 9b839f8..baf4e66 100644 --- a/Assets/Scripts/PlayerPosition.cs +++ b/Assets/Scripts/PlayerPosition.cs @@ -23,7 +23,9 @@ public class PlayerPosition : MonoBehaviour while (true) { yield return new WaitUntil(() => _playerLocomotion == null); - _playerLocomotion = GetComponent(); + var list = Resources.FindObjectsOfTypeAll(); + if (list.Length > 0) + _playerLocomotion = list[0]; yield return new WaitForSeconds(5f); } } -- cgit