using UnityEngine; namespace BaseGames.Dialogue { /// /// 对话行结构(架构 14_NarrativeModule §3)。 /// 每行包含说话人、文本(本地化 Key)和可选的语音片段。 /// [System.Serializable] public struct DialogueLine { public string speakerNameKey; // 本地化 key(如 "NPC_Elder_Name") [TextArea(2, 5)] public string textKey; // 本地化文本 key(如 "DLG_Elder_001") public Sprite portraitSprite; // 可选说话人头像 public AudioClip voiceClip; // 可选语音 [Min(0.01f)] public float typewriterDelay; // 每字符延迟(秒,0 = 使用默认 0.03f) } /// /// 对话序列 SO(架构 14_NarrativeModule §3)。 /// 一个 NPC 对话场合对应一个序列,由若干 DialogueLine 组成。 /// 资产路径: Assets/ScriptableObjects/Dialogue/DLG_{NpcId}_{Context}.asset /// [CreateAssetMenu(menuName = "Dialogue/DialogueSequence")] public class DialogueSequenceSO : ScriptableObject { public string sequenceId; // 全局唯一,如 "DLG_Elder_Quest_Available" public DialogueLine[] lines; /// 条件变体:满足特定世界标志时替换整个序列。 [System.Serializable] public struct ConditionalVariant { public string conditionFlag; // WorldState flag key public DialogueSequenceSO sequence; } public ConditionalVariant[] variants; } }