配置叙事设计触发器
说明如何添加一个叙事设计触发器,通过碰撞、接近、计时或手动信号推进角色的故事。
ConvaiNarrativeDesignTrigger 向 Convai 发送一个命名信号,使故事图从一个部分推进到下一个部分。将其放在任何 GameObject 上——门口、展品、UI 按钮的事件目标——并选择其激活方式。叙事触发器不同于 Unity Physics 触发器:激活模式控制 当 信号何时发送,而不是触发哪种 Unity 物理事件。
添加触发器组件
激活模式

碰撞
默认模式。当带标签的玩家 GameObject 进入附加在同一 GameObject 上的碰撞体时,触发器会触发。
要求:
一个
Collider组件在同一个 GameObject 上,并且 Is Trigger 已启用。触发器 GameObject 或玩家 GameObject 中,至少有一个必须具有
Rigidbody以便 Unity 物理系统生成OnTriggerEnter回调。
如果 Is Trigger 如果碰撞体未启用,或者触发对象和玩家都没有 Rigidbody, OnTriggerEnter ,则永远不会触发。启用 启动时验证 ,即可在场景运行时自动捕获此情况。
检测设置:
Player Tag
"Player"
只有带此标签的 GameObject 才会被识别为玩家。
Player Layer
所有层
用于进一步筛选哪些对象被视为玩家的层遮罩。
Proximity
当玩家到该组件的距离 Transform 落在 Proximity Radius. 检查在 更新中每帧运行。场景视图中会绘制一个绿色球体,显示检测半径。
Proximity Radius
3
以世界单位表示的检测半径。
Player Tag
"Player"
用于标识玩家的标签。
自动查找玩家
是
如果未分配,则搜索场景中带标签的玩家 GameObject。
此模式不需要碰撞体。
基于时间
当玩家在碰撞体区域内停留达到设定时长后,触发器会触发。如果玩家在延迟结束前离开,倒计时将取消,并在玩家下次进入时重新开始。
要求: 与 Collision 模式相同的碰撞体设置。
时间延迟
0
玩家在区域内必须停留的秒数,之后触发器才会触发。
Player Tag
"Player"
用于标识玩家的标签。
手动
触发器不会自动执行任何操作。调用 InvokeTrigger() 或 TryInvokeTrigger() 即可从你自己的代码或 Unity Event 中触发它。当前置条件完全由你的游戏逻辑控制时使用此模式——例如 UI 按钮、任务完成回调或计分交互。
触发请求模式
激活模式和触发请求模式是两个独立设置。激活模式(碰撞, Proximity, 基于时间, 手动)控制 当 ConvaiNarrativeDesignTrigger 何时触发,如上所述。触发请求模式控制 什么 在触发后通过 RTVI 发送给 Convai。
ConvaiNarrativeDesignTrigger 始终使用 ConvaiNarrativeTriggerMode.SavedTrigger发送其配置的触发器。内部调用 convaiCharacter.NarrativeDesign.InvokeTrigger(_triggerName),仅发送 trigger_name 字段。此组件的 Inspector 中没有选项可切换为另外两种触发请求模式中的任一种。
在 ConvaiNarrativeTriggerRequest (命名空间 Convai.Runtime.NarrativeDesign):
SavedTrigger
trigger_name
ConvaiNarrativeDesignTrigger (此组件),或 IConvaiNarrativeDesign.InvokeTrigger(string) 从代码中
InlineEvent
trigger_message
IConvaiNarrativeDesign.InvokeEvent(string) ——仅限代码,无 Inspector 对应项
ScriptedSpeech
trigger_message (包裹在 <speak> 标签中)
IConvaiNarrativeDesign.InvokeSpeech(string) ——仅限代码,无 Inspector 对应项
InlineEvent 和 ScriptedSpeech 在此组件的 Inspector 中无法访问。使用 InvokeEvent 发送上下文事件文本,让 Convai 自然响应,或者使用 InvokeSpeech 让角色说出精确的脚本文本,而不推进叙事图。参见 叙事设计脚本参考 完整代码 API。
自动恢复设置
这些设置使触发器能够适应角色或玩家可能不会立即就绪的常见运行时情况。

自动查找角色
是
搜索父级层级,然后 ConvaiManager.Characters。如果只有一个角色则自动分配;如果发现多个角色,则记录警告。
自动查找玩家
是
先按 Player Tag 搜索,再按常见名称列表搜索,然后通过 Camera.main.parent.
等待就绪队列
是
如果角色尚未处于活动对话中(IsInConversation 是 否),则触发器会排队,并在连接建立时自动触发。你无需在调用 IsInConversation 之前手动检查 InvokeTrigger().
最大等待时间
30
等待角色就绪的最长秒数。设为 0 表示不超时。
场景加载时重置
是
调用 ResetTrigger() 在加载任何场景时重置,以便触发器可以在重新加载的场景中再次触发。
设置 最大等待时间 移动到 0 在会话可能永远不会连接的生产构建中,
控制触发频率
仅触发一次 (默认 是)可防止触发器被触发超过一次。第一次成功调用后, HasTriggered 变为 是, CurrentStatus 变为 AlreadyFired,之后所有调用都返回 否.
若要让触发器再次触发,请调用 ResetTrigger():
ResetTrigger() 还会取消任何正在等待角色就绪的排队触发器。
若要让触发器在每次激活时都触发,请禁用 仅触发一次 检查器中进行配置。
事件参考
OnTriggerActivated
UnityEvent
触发器已成功发送到后端。
OnPlayerEnterZone
UnityEvent
玩家已进入碰撞体或接近区域(在触发器触发之前)。
OnPlayerExitZone
UnityEvent
玩家已离开碰撞体或接近区域。
OnTriggerFailed
UnityEvent<string>
触发器无法触发。字符串参数包含错误消息。
OnTriggerQueued
UnityEvent
触发器已接受,但因角色尚未进入对话而被延迟。
触发器状态
“ CurrentStatus 属性始终跟踪触发器的状态:
参见 排查叙事设计 ,以获取每种状态的完整解决指南。
检查器参考
角色引用标题
角色
无
目标 ConvaiCharacter。如果为空则自动查找,并且 自动查找角色 已启用。
自动查找角色
是
当 Character 字段为空时,搜索层级和 ConvaiManager。
触发器选择标题
触发器 ID
空
选择后只读。来自仪表板的唯一标识符。
触发器名称
空
此组件触发时发送给 Convai 的已保存触发器名称。
触发器消息
空
从 Convai 获取的只读元数据。它不会由 ConvaiNarrativeDesignTrigger.
激活设置标题
激活模式
碰撞
触发器如何激活: 碰撞, Proximity, 手动,或 基于时间.
Proximity Radius
3
Proximity 模式的检测半径。
时间延迟
0
TimeBased 模式的倒计时秒数。
仅触发一次
是
如果启用,则在 ResetTrigger() 被调用。
Player Layer
全部
用于玩家检测的层遮罩。
Player Tag
"Player"
用于识别玩家 GameObject 的标签。
自动恢复设置标题
自动查找玩家
是
如果未检测到任何带标签的玩家,则在场景中搜索。
等待就绪队列
是
将触发器延后,直到角色会话打开。
最大等待时间
30
队列超时秒数。 0 = 无超时。
场景加载时重置
是
在 HasTriggered 场景加载时重置。
诊断标题
启用诊断
否
将详细状态转换记录到 Console。
启动时验证
是
运行 ValidateConfiguration() 在 Start 时记录任何问题。
下一步
配置叙事模板键叙事设计脚本参考最后更新于
这有帮助吗?

