确认在 StartDialogue 之前已调用 LoadDialogueDataAsset
StartDialogue
LoadDialogueDataAsset
检查数据资产中是否存在 SequenceName
SequenceName
确保 StartNodeID 有效且匹配现有节点 ID
StartNodeID
确认组件已添加到 Actor
OnDialogueNodeExecuted
首节点必须是文本类型;选择/事件/延时节点不会触发此事件
对于其他节点类型,同时绑定 OnDialogueChoiceNodeExecuted 和 OnDialogueEventTriggered
OnDialogueChoiceNodeExecuted
OnDialogueEventTriggered
检查 DisplayDelay 设置(0 = 立即,>0 = 延时)
DisplayDelay
事件绑定必须在调用 StartDialogue 之前完成
验证 StartNodeID 完全匹配节点的 NodeID(复制粘贴,不要生成)
NodeID
确保节点 Conditions 为空或所有条件评估为 true
Conditions
组件和 Actor 必须可 Tick(未暂停/禁用)
验证事件签名匹配委托:Node(FDialogueNode)、SpeakerInfo(FSpeakerInfo)、NodeID(FGuid)
Node(FDialogueNode)
SpeakerInfo(FSpeakerInfo)
NodeID(FGuid)
变量名区分大小写
值类型必须匹配 ValueType 设置
ValueType
比较值必须是字符串表示(例如:布尔值:"true" 或 "false")
"true"
"false"
数组中的所有条件必须通过(AND 逻辑)
检查文本节点上的 AutoAdvanceDelay > 0
AutoAdvanceDelay > 0
如果 AutoAdvanceDelay = 0,需要手动 AdvanceDialogue()
AutoAdvanceDelay = 0
AdvanceDialogue()
验证组件正在 Tick
AdvanceDialogue() 仅在以下情况下工作:
当前节点是文本类型
节点执行回调已完成
其他节点类型自动继续
验证选择节点上的 SelectionTimeout > 0
SelectionTimeout > 0
确保设置了 TimeoutNodeID 且指向有效节点
TimeoutNodeID
检查组件是否正在 Tick
如有问题,可来Dicord社区找我!
Last updated 4 months ago