编写对话目标脚本
通过脚本将对话转移到特定角色,并选择房间连接时打开在哪个角色上。
使用以下方法将对话切换到脚本中的特定角色 ConvaiManager.TalkTo,或者使用以下方法选择房间初始打开时对应的角色 ConvaiManager.SetInitialCharacter。当对话菜单、任务步骤或触发器体积需要决定玩家正在与谁交谈,而不是依据玩家的视角或位置时,请使用本页。
前提条件
两个或更多
ConvaiCharacter在场景中注册的组件对当前活动对象的引用
ConvaiManager
将对话指向某个角色
TalkTo 是用于脚本化对话切换的动词。可在任何时候调用——当房间不是多角色房间,或者该角色不在房间内时,它不会执行任何操作。
ConvaiManager manager = ConvaiManager.ActiveManager;
manager.TalkTo(questGiver);TalkTo 可在任何目标设定模式下工作,包括 LookAt 和 Proximity ——它不需要 手动。在自动模式下,一旦玩家看向别处或移动,下一次评估就可以再次移动对话。请选择 手动 当除了脚本调用外不应有任何东西移动目标时。
选择房间初始打开时对应的角色
SetInitialCharacter 在房间连接时选择谁先发言——这与 TalkTo不同。它属于设置,而不是控制:它决定对话从哪里开始;对已经连接的房间调用它时,会排队重新连接,而不是移动当前对话。保持其未设置是正常的——场景顺序中的第一个角色将获得第一轮发言。
manager.SetInitialCharacter(receptionist);SetInitialCharacter 只决定谁获得第一轮发言。在 LookAt 和 Proximity模式下,对话会从房间就绪的那一刻开始重新评估,并在其他角色得分更高时立即移出该角色。要在实时房间中移动对话,请调用 TalkTo,而不是 SetInitialCharacter.
读取当前目标
ConversationTargetingStatus 用于说明上一次目标设定决策之所以那样的原因——这对于区分被保留的目标和卡住的目标很有用,因为从外部看它们一模一样。
订阅目标设定事件
ConversationTargetRequested 在 SDK 关闭玩家输入之后、并在尝试发送目标变更之前立即触发;该发送仍然可能失败。 ConversationTargetChanged 当来自 Convai 的权威响应在一个往返之后协调路由时触发。Convai 因这次移动而执行的任何操作,包括结束上一位角色的回合,都会发生在这两个事件之间。
一次只能有一个角色说话
调用 TalkTo 会立即结束上一位角色的回合,即使话说到一半也是如此——请参阅 一次只能有一个角色说话 以了解完整规则以及如何避免打断脚本台词。
验证更改
调用 TalkTo 在 Play 模式下确认对话已移动到指定角色——该角色的音频和口型同步应在下一次响应时开始,并且 ConversationTarget 应返回该角色。
下一步
编写自定义目标选择规则对话目标选择参考最后更新于
这有帮助吗?