feat(dialog): 升级Dialog系统到YarnSpinner 3.2

This commit is contained in:
2026-04-23 11:55:43 +08:00
parent cbae4cdb22
commit b447d4784c
9 changed files with 389 additions and 136 deletions
@@ -2,21 +2,23 @@
using AibisDream.Framework;
using AibisDream.Kit;
using UnityEngine;
using UnityEngine.Events;
using Yarn.Unity;
namespace AibisDream
{
public class DialogController : Singleton<DialogController>
{
private const string DefaultDialogueLocaleCode = "zh-Hans";
private DialogueRunner _dialogueRunner;
private LocalisedLineProvider _lineProvider;
[SerializeField] private LineAdvanceInput lineAdvanceInput;
private void Start()
{
_dialogueRunner = GetComponentInChildren<DialogueRunner>();
_lineProvider = GetComponentInChildren<LocalisedLineProvider>();
_dialogueRunner.onDialogueStart ??= new UnityEvent();
_dialogueRunner.onDialogueComplete ??= new UnityEvent();
_dialogueRunner.onDialogueStart.AddListener(() =>
{
@@ -72,13 +74,13 @@ namespace AibisDream
public void StartDialog(YarnProject yarnProject)
{
_dialogueRunner.SetProject(yarnProject);
_lineProvider.InitStringTable(yarnProject.name);
_dialogueRunner.StartDialogue("Start");
ConfigureLineProviderLocale();
_ = _dialogueRunner.StartDialogue("Start");
}
public void StopDialog()
{
_dialogueRunner.Stop();
_ = _dialogueRunner.Stop();
StorageSystem.Instance.Clear();
DialogUIManager.Instance.HideDialog();
}
@@ -86,8 +88,8 @@ namespace AibisDream
public void LoadDialog(YarnProject yarnProject)
{
_dialogueRunner.SetProject(yarnProject);
_lineProvider.InitStringTable(yarnProject.name);
_dialogueRunner.StartDialogue("Center");
ConfigureLineProviderLocale();
_ = _dialogueRunner.StartDialogue("Center");
}
public void StartDialogNode(string nodeName)
@@ -101,7 +103,7 @@ namespace AibisDream
if (CheckIfNodeExistInCurrentYarnProject(nodeName))
{
_dialogueRunner.StartDialogue(nodeName);
_ = _dialogueRunner.StartDialogue(nodeName);
}
else
{
@@ -111,7 +113,13 @@ namespace AibisDream
private bool CheckIfNodeExistInCurrentYarnProject(string nodeName)
{
YarnProject currentProject = _dialogueRunner.yarnProject;
var currentProject = _dialogueRunner.YarnProject;
if (currentProject == null)
{
Debug.LogWarning("当前没有可用的 YarnProject,无法检查节点");
return false;
}
string[] nodeNames = currentProject.NodeNames;
if (Array.Exists(nodeNames, item => item == nodeName))
{
@@ -124,6 +132,14 @@ namespace AibisDream
}
}
private void ConfigureLineProviderLocale()
{
if (_dialogueRunner.LineProvider is LineProviderBehaviour lineProvider)
{
lineProvider.LocaleCode = DefaultDialogueLocaleCode;
}
}
#endregion
#region