42 lines
1.7 KiB
C#
42 lines
1.7 KiB
C#
using UnityEngine;
|
||
|
||
namespace BaseGames.Dialogue
|
||
{
|
||
/// <summary>
|
||
/// 对话行结构(架构 14_NarrativeModule §3)。
|
||
/// 每行包含说话人、文本(本地化 Key)和可选的语音片段。
|
||
/// </summary>
|
||
[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)
|
||
}
|
||
|
||
/// <summary>
|
||
/// 对话序列 SO(架构 14_NarrativeModule §3)。
|
||
/// 一个 NPC 对话场合对应一个序列,由若干 DialogueLine 组成。
|
||
/// 资产路径: Assets/ScriptableObjects/Dialogue/DLG_{NpcId}_{Context}.asset
|
||
/// </summary>
|
||
[CreateAssetMenu(menuName = "BaseGames/Dialogue/DialogueSequence")]
|
||
public class DialogueSequenceSO : ScriptableObject
|
||
{
|
||
public string sequenceId; // 全局唯一,如 "DLG_Elder_Quest_Available"
|
||
public DialogueLine[] lines;
|
||
|
||
/// <summary>条件变体:满足特定世界标志时替换整个序列。</summary>
|
||
[System.Serializable]
|
||
public struct ConditionalVariant
|
||
{
|
||
public string conditionFlag; // WorldState flag key
|
||
public DialogueSequenceSO sequence;
|
||
}
|
||
public ConditionalVariant[] variants;
|
||
}
|
||
}
|