From 9274281fcbb4a398a09d648123e164f44494cf7c Mon Sep 17 00:00:00 2001 From: bottlefish <781230111@qq.com> Date: Mon, 14 Jul 2025 22:50:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=9E=E5=A4=8D=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Scripts/Dialog System/LineView.cs | 44 +------------------ .../UI/DialogUI/Bubbles/BubbleGroup.cs | 18 -------- Assets/Scripts/UI/DialogUI/CenterOption.cs | 11 +---- Assets/Scripts/UI/DialogUI/DialogBox.cs | 15 ++----- .../UI/DialogUI/DialogCanvasManager.cs | 39 +--------------- 5 files changed, 7 insertions(+), 120 deletions(-) diff --git a/Assets/Scripts/Dialog System/LineView.cs b/Assets/Scripts/Dialog System/LineView.cs index 477437311..8cce52c29 100644 --- a/Assets/Scripts/Dialog System/LineView.cs +++ b/Assets/Scripts/Dialog System/LineView.cs @@ -2,7 +2,6 @@ using System; using AibisDream.Framework; using AibisDream.Utility; using Yarn.Unity; -using UnityEngine; namespace AibisDream { @@ -15,28 +14,6 @@ namespace AibisDream HandleLineOutput(dialogueLine, onDialogueLineFinished); if (DialogController.Instance.quickRunMode) - { - // 在快速模式下,延迟更多帧数并重复检查,确保选项有足够时间显示 - StartCoroutine(QuickRunNextStep(onDialogueLineFinished)); - } - } - - private System.Collections.IEnumerator QuickRunNextStep(Action onDialogueLineFinished) - { - // 延迟1帧,给Yarn足够时间检查下一个内容是否为选项 - yield return null; - - // 检查1次,现在有了_isProcessingOptions标志,应该足够了 - if (DialogCanvasManager.Instance.HasActiveOptions()) - { - yield break; - } - - // 再等1帧确保 - yield return null; - - // 如果没有选项,则跳过到下一行 - if (!DialogCanvasManager.Instance.HasActiveOptions()) { DialogCanvasManager.Instance.TrySkipLine(true); DialogCanvasManager.Instance.NextStep(); @@ -52,27 +29,8 @@ namespace AibisDream public override void RunOptions(DialogueOption[] dialogueOptions, Action onOptionSelected) { EnumEventSystem.Global.Send(DialogEventEnum.OptionShow); - - // 自动暂停快进,选项被选择后再恢复 - bool wasQuickRun = DialogController.Instance.quickRunMode; - DialogController.Instance.quickRunMode = false; - - // 包装原有回调,选项被选择后恢复快进状态 - Action wrappedOnOptionSelected = idx => { - // 延迟一帧恢复快进状态,确保Yarn流程正确执行 - DialogController.Instance.StartCoroutine(RestoreQuickRunMode(wasQuickRun)); - onOptionSelected(idx); - }; - - // 只调用一次ShowOptions,使用包装后的回调 - var options = DialogOption.GeneOptions(dialogueOptions, wrappedOnOptionSelected); + var options = DialogOption.GeneOptions(dialogueOptions, onOptionSelected); DialogCanvasManager.Instance.ShowOptions(options); } - - private System.Collections.IEnumerator RestoreQuickRunMode(bool wasQuickRun) - { - yield return null; // 等待一帧 - DialogController.Instance.quickRunMode = wasQuickRun; - } } } \ No newline at end of file diff --git a/Assets/Scripts/UI/DialogUI/Bubbles/BubbleGroup.cs b/Assets/Scripts/UI/DialogUI/Bubbles/BubbleGroup.cs index 62820f521..2d5950eef 100644 --- a/Assets/Scripts/UI/DialogUI/Bubbles/BubbleGroup.cs +++ b/Assets/Scripts/UI/DialogUI/Bubbles/BubbleGroup.cs @@ -177,24 +177,6 @@ namespace AibisDream { } - /// - /// 检查当前是否有活动的选项显示 - /// - /// 是否有活动选项 - public bool HasActiveOptions() - { - if (_options == null) return false; - - foreach (var option in _options) - { - if (option.gameObject.activeSelf) - { - return true; - } - } - return false; - } - #endregion private void HideDialog(Bubble activeBubble) diff --git a/Assets/Scripts/UI/DialogUI/CenterOption.cs b/Assets/Scripts/UI/DialogUI/CenterOption.cs index e690e7a8a..423bd0366 100644 --- a/Assets/Scripts/UI/DialogUI/CenterOption.cs +++ b/Assets/Scripts/UI/DialogUI/CenterOption.cs @@ -71,16 +71,7 @@ namespace AibisDream { // 无法继续 } - - /// - /// 检查当前是否有活动的选项显示 - /// - /// 是否有活动选项 - public bool HasActiveOptions() - { - return gameObject.activeSelf; - } - + public void OnLocalizationChanged(string value) { _textParam = JsonUtil.ReadBeanByText(value); diff --git a/Assets/Scripts/UI/DialogUI/DialogBox.cs b/Assets/Scripts/UI/DialogUI/DialogBox.cs index cc011bed0..5a8fc816e 100644 --- a/Assets/Scripts/UI/DialogUI/DialogBox.cs +++ b/Assets/Scripts/UI/DialogUI/DialogBox.cs @@ -100,29 +100,22 @@ namespace AibisDream public void NextStep() { if (_nextStep == null) return; - - ClearBox(); + EnumEventSystem.Global.Send(DialogEventEnum.LineEnd); + // 关闭对话 var next = _nextStep; _nextStep = null; next.Invoke(); } - /// - /// 检查当前是否有活动的选项显示 - /// - /// 是否有活动选项 - public bool HasActiveOptions() - { - return _choiceBox != null && _choiceBox.activeSelf; - } - public void OnLocalizationChanged(string value) { _textParam = JsonUtil.ReadBeanByText(value); + var tmp = _dialogText.GetComponent(); // 修改对话文本 tmp.characterSpacing = _textParam.charSpace; + _actorName.characterSpacing = _textParam.charSpace; } /// diff --git a/Assets/Scripts/UI/DialogUI/DialogCanvasManager.cs b/Assets/Scripts/UI/DialogUI/DialogCanvasManager.cs index c5d17ea91..3da601c56 100644 --- a/Assets/Scripts/UI/DialogUI/DialogCanvasManager.cs +++ b/Assets/Scripts/UI/DialogUI/DialogCanvasManager.cs @@ -32,7 +32,6 @@ namespace AibisDream private bool _isNextAutoSkip; private bool _isNextBlocked; - private bool _isProcessingOptions; // 标记是否正在处理选项 #endregion @@ -85,7 +84,7 @@ namespace AibisDream AddDialogueLine)); _rmvList.Add( EnumEventSystem.Global.Register(DialogEventEnum.OptionSelected, - OnOptionSelected)); + AddDialogueLine)); _rmvList.Add(EnumEventSystem.Global.Register(EventEnum.NextYarn, CleanDialogHistory)); // 文本显示事件 @@ -143,12 +142,6 @@ namespace AibisDream _autoNext = null; } - private void OnOptionSelected(DialogText dialogText) - { - _isProcessingOptions = false; // 清除处理选项的标志 - AddDialogueLine(dialogText); // 记录选项 - } - public override void OnSingletonDestroy() { // 销毁前处理事件 @@ -240,8 +233,6 @@ namespace AibisDream public void ShowOptions(DialogOption[] dialogueOptions) { - _isProcessingOptions = true; // 设置正在处理选项的标志 - var viewType = dialogueOptions[0].Character.dialogViewType; // 根据状况选择不同的选择框 if (viewType == DialogViewType.Default) @@ -277,7 +268,6 @@ namespace AibisDream public void HideDialog() { - _isProcessingOptions = false; // 清除处理选项的标志 _showingView?.HideDialog(); } @@ -293,7 +283,6 @@ namespace AibisDream public void NextStep() { - _isProcessingOptions = false; // 清除处理选项的标志 var view = _showingView; _hideDialog = ActionKit.Delay(autoHideDuration, () => { @@ -307,32 +296,6 @@ namespace AibisDream { } - /// - /// 检查当前是否有活动的选项显示 - /// - /// 是否有活动选项 - public bool HasActiveOptions() - { - // 如果正在处理选项,返回true - if (_isProcessingOptions) - { - return true; - } - - // 检查当前显示的对话框是否有选项 - if (_showingView != null) - { - // 通过反射检查当前对话框是否有选项显示 - var hasOptionsMethod = _showingView.GetType().GetMethod("HasActiveOptions", - System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); - if (hasOptionsMethod != null) - { - return (bool)hasOptionsMethod.Invoke(_showingView, null); - } - } - return false; - } - public void SwitchDialogView(DialogViewType dialogViewType) { if (_dialogViewDict.TryGetValue(dialogViewType, out var view))