配置叙事设计触发器
配置 ConvaiNarrativeDesignTrigger,以使用碰撞、接近、基于时间或手动激活模式推进叙事图谱。
最后更新于
这有帮助吗?
配置 ConvaiNarrativeDesignTrigger,以使用碰撞、接近、基于时间或手动激活模式推进叙事图谱。
ConvaiNarrativeDesignTrigger 向 Convai 发送一个命名信号,用于将故事图从一个部分推进到下一个部分。将它放在任何 GameObject 上——门口、展品、UI 按钮的事件目标——并选择它应如何激活。叙事触发器不同于 Unity Physics 触发器:激活模式控制 当 信号何时发送,而不是触发哪种 Unity 物理事件。

默认模式。当带有指定标签的玩家 GameObject 进入附加在同一 GameObject 上的碰撞体时,触发器会触发。
要求:
一个 Collider 组件,且位于同一个 GameObject 上,并启用 Is Trigger 。
触发器 GameObject 或玩家 GameObject 其中之一必须具有 Rigidbody ,Unity 物理系统才能生成 OnTriggerEnter 回调。
如果 Is Trigger 未在碰撞体上启用,或者触发器对象和玩家都没有 Rigidbody, OnTriggerEnter 则永远不会触发。启用 启动时验证 以便在场景运行时自动捕获此问题。
检测设置:
玩家标签
"玩家"
只有带有此标签的 GameObject 才会被识别为玩家。
玩家层
所有层
用于进一步筛选哪些对象算作玩家的层遮罩。
当玩家与组件的 Transform 之间的距离落入 接近半径内时,触发器会触发。检查会在 Update中的每一帧运行。场景视图中会绘制一个绿色球体,显示检测半径。
接近半径
3
以世界单位表示的检测半径。
玩家标签
"玩家"
用于标识玩家的标签。
自动查找玩家
true
如果未分配玩家 GameObject,则在场景中搜索带标签的玩家 GameObject。
此模式不需要碰撞体。
当玩家在碰撞体区域内停留达到设定时长后,触发器会触发。如果玩家在延迟结束前离开,倒计时会取消,并在玩家下次进入时重新开始。
要求: 与 Collision 模式相同的碰撞体设置。
时间延迟
0
玩家必须在区域内停留多少秒后触发器才会触发。
玩家标签
"玩家"
用于标识玩家的标签。
触发器不会自动执行任何操作。调用 InvokeTrigger() 或 TryInvokeTrigger() ,即可从你自己的代码或 Unity Event 中触发它。当激活条件完全由你的游戏逻辑控制时,请使用此模式——例如 UI 按钮、任务完成回调或计分交互。
这些设置使触发器能够适应常见的运行时情况,即角色或玩家可能不会立即就绪。

自动查找角色
true
先搜索父级层级,然后搜索 ConvaiManager.Characters。如果只有一个角色则自动分配;如果找到多个角色,则记录警告。
自动查找玩家
true
先按 Player Tag 搜索,然后按常见名称列表搜索,最后通过 Camera.main.parent.
等待就绪前排队
true
如果角色尚未处于活动对话中(IsInConversation 为 false),则触发器会进入队列,并在连接建立后自动触发。你无需 IsInConversation 在调用前手动检查 InvokeTrigger().
最大等待时间
30
等待角色就绪的最长秒数。设置为 0 表示无超时。
在场景加载时重置
true
调用 ResetTrigger() ,每当场景加载时调用,因此在重新加载的场景中触发器可以再次触发。
设置 最大等待时间 到 0 在会话可能永远无法连接的正式构建中进行此设置会创建一个无限期协程。除非你明确控制会话生命周期,否则务必设置合理的超时时间。
仅触发一次 (默认 true)可防止触发器多次触发。首次成功调用后, HasTriggered 变为 true, CurrentStatus 变为 AlreadyFired,之后所有调用都返回 false.
要让触发器再次触发,请调用 ResetTrigger():
ResetTrigger() 还会取消任何正在等待角色就绪的排队触发。
要让触发器在每次激活时都触发,请禁用 仅触发一次 在检查器中。
OnTriggerActivated
UnityEvent
触发器已成功发送到后端。
OnPlayerEnterZone
UnityEvent
玩家进入了碰撞体或接近区域(在触发器触发之前)。
OnPlayerExitZone
UnityEvent
玩家离开了碰撞体或接近区域。
OnTriggerFailed
UnityEvent<string>
触发器无法触发。字符串参数包含错误消息。
OnTriggerQueued
UnityEvent
触发器已被接受,但因角色尚未进入对话而延后。
该 CurrentStatus 属性会始终跟踪触发器的状态:
参见 排查叙事设计问题 ,获取每种状态的完整解决指南。
角色
无
目标 ConvaiCharacter。如果留空并且 自动查找角色 已启用,则自动查找。
自动查找角色
true
如果 Character 字段为空,则搜索层级和 ConvaiManager。
触发器 ID
空
选择后只读。来自仪表板的唯一标识符。
触发器名称
空
所选触发器的显示名称。
触发消息
空
随触发器发送的可选消息载荷。可通过程序设置为 SetTriggerMessage().
激活模式
碰撞
触发器如何激活: 碰撞, 接近, 手动,或 基于时间.
接近半径
3
Proximity 模式的检测半径。
时间延迟
0
TimeBased 模式的倒计时秒数。
仅触发一次
true
如果启用,则仅触发一次,直到 ResetTrigger() 被调用时。
玩家层
全部
用于玩家检测的层遮罩。
玩家标签
"玩家"
用于标识玩家 GameObject 的标签。
自动查找玩家
true
如果未检测到玩家,则在场景中搜索带标签的玩家。
等待就绪前排队
true
将触发器延后,直到角色会话打开。
最大等待时间
30
队列超时时间(秒)。 0 = 无超时。
在场景加载时重置
true
重置 HasTriggered 于场景加载时。
启用诊断
false
将详细状态转换记录到控制台。
启动时验证
true
运行 ValidateConfiguration() 在 Start 时执行并记录任何问题。
最后更新于
这有帮助吗?
这有帮助吗?
// 从代码触发触发器
narrativeTrigger.InvokeTrigger();
// 静默尝试——如果 TriggerOnce 已经触发,则跳过且不警告
narrativeTrigger.TryInvokeTrigger();narrativeTrigger.ResetTrigger();