diff --git a/Assets/Scripts/Dialog System/DialogController.cs b/Assets/Scripts/Dialog System/DialogController.cs index ba39ddb19..19d56eae4 100644 --- a/Assets/Scripts/Dialog System/DialogController.cs +++ b/Assets/Scripts/Dialog System/DialogController.cs @@ -48,6 +48,12 @@ namespace AibisDream dialogueRunner.onDialogueStart.AddListener(() => { OnDialogueStart?.Invoke(); }); dialogueRunner.onDialogueComplete.AddListener(() => { OnDialogueComplete?.Invoke(); }); dialogueRunner.AddCommandListener(_ => { IsTalking = false; }); + + // 对话结束时切下一个SO + dialogueRunner.onDialogueComplete.AddListener(() => + { + StartCoroutine(GameLoopManager.Instance.NextSceneSo()); + }); } #region 变量操作 @@ -220,18 +226,6 @@ namespace AibisDream { return MainUIController.Instance.FadeOutSync(duration); } - - [YarnCommand("fade_in")] - public static IEnumerator FadeIn() - { - return MainUIController.Instance.FadeInSync(1); - } - - [YarnCommand("fade_out")] - public static IEnumerator FadeOut() - { - return MainUIController.Instance.FadeOutSync(1); - } #endregion } diff --git a/Assets/Scripts/Game Loop/GameLoopManager.cs b/Assets/Scripts/Game Loop/GameLoopManager.cs index a1345e6e3..e8a8095a6 100644 --- a/Assets/Scripts/Game Loop/GameLoopManager.cs +++ b/Assets/Scripts/Game Loop/GameLoopManager.cs @@ -40,7 +40,7 @@ namespace AibisDream private IEnumerator LoadClinicScene() { - yield return StartCoroutine(SceneLoader.Instance.LoadSceneAsync(clinicScene)); + yield return SceneLoader.Instance.LoadSceneAsync(clinicScene); StartMenuViewer.Instance.HideStartMenu(); DialogController.Instance.StartDialog(currentTalkSceneSO.yarnProject); } @@ -51,6 +51,22 @@ namespace AibisDream var proj = Resources.Load($"Yarn/{testYarnProject}/{testYarnProject}"); DialogController.Instance.StartDialog(proj); } + + public IEnumerator NextSceneSo() + { + if (currentTalkSceneSO && currentTalkSceneSO.nextScene) + { + currentTalkSceneSO = currentTalkSceneSO.nextScene; + yield return MainUIController.Instance.FadeInSync(1); + yield return LoadClinicScene(); + yield return MainUIController.Instance.FadeOutSync(1); + } + else + { + yield return null; + Debug.Log("没有下个场景了"); + } + } } public enum RunMode diff --git a/Assets/Scripts/Game Loop/SceneLoader.cs b/Assets/Scripts/Game Loop/SceneLoader.cs index 85516e0d0..ff3faf930 100644 --- a/Assets/Scripts/Game Loop/SceneLoader.cs +++ b/Assets/Scripts/Game Loop/SceneLoader.cs @@ -8,10 +8,12 @@ namespace AibisDream public class SceneLoader : Singleton { #region 场景转换参数 + private string currentScene; private AsyncOperationHandle _loadHandle; private string sceneToLoad; private bool isLoading; + #endregion /// @@ -44,13 +46,14 @@ namespace AibisDream yield return Addressables.UnloadSceneAsync(_loadHandle); } - _loadHandle = Addressables.LoadSceneAsync(sceneToLoad, LoadSceneMode.Additive, true); + _loadHandle = Addressables.LoadSceneAsync(sceneToLoad, LoadSceneMode.Additive); yield return _loadHandle; currentScene = sceneToLoad; isLoading = false; } } + public IEnumerator UnloadSceneAsync(string sceneToUnload) { if (isLoading) @@ -71,5 +74,4 @@ namespace AibisDream } } } -} - +} \ No newline at end of file diff --git a/Assets/Scripts/UI/DialogUiViewer.cs b/Assets/Scripts/UI/DialogUiViewer.cs index 4ae1876f2..e8ff45aed 100644 --- a/Assets/Scripts/UI/DialogUiViewer.cs +++ b/Assets/Scripts/UI/DialogUiViewer.cs @@ -89,6 +89,7 @@ namespace AibisDream public void ShowAutoLine(string dialogLine, string actor, Action nextStep) { dialogBox.SetActive(true); + dialogText.ShowText(""); dialogText.gameObject.SetActive(true); choiceBox.SetActive(false);