根据可用性控制 UI
根据对话可用性控制自定义聊天输入框或麦克风按钮,使玩家输入要等到角色能听到时才生效。
将你自己的聊天输入框、麦克风按钮或发送操作绑定到 ConvaiManager.ConversationAvailability 这样它只有在被提及的角色确实能听到时才接受输入。构建自定义输入 UI 而不是使用随附的聊天输入框时,请使用此页面,因为后者已经会自行进行门控——请参见 自定义聊天输入框提示 如果你配置的正是这个。
前提条件
读取当前判定结果
ConvaiManager.ConversationAvailability 返回当前 ConvaiConversationAvailability 用于 ConvaiManager.AddressedCharacter。调用 CanAcceptPlayerInput() 在结果上调用它,以获得 UI 所需的单个布尔值:
using Convai.Runtime.Components;
using UnityEngine;
using UnityEngine.UI;
public class SendButtonGate : MonoBehaviour
{
[SerializeField] private ConvaiManager _manager;
[SerializeField] private Button _sendButton;
private void Update()
{
_sendButton.interactable = _manager.ConversationAvailability.CanAcceptPlayerInput();
}
}改为响应变更事件,而不是轮询
ConvaiManager.ConversationAvailabilityChanged 每当判定发生变化时都会触发,包括玩家开始对另一个可用性不同的角色说话时。订阅它,以便立即更新 UI,而不是等到下一帧:
针对特定角色进行门控,而不是针对当前被提及的角色
绑定到某个特定角色的 UI 元素——例如名牌、多角色场景中的按角色指示器——应当读取 ConvaiCharacter.ConversationAvailability 该角色本身,而不是 ConvaiManager.ConversationAvailability,后者始终返回当前被提及对象的结果:
ConvaiCharacter.ConversationAvailability 与……不同 ConvaiCharacter.IsCharacterReady. IsCharacterReady 由 Convai 的角色就绪信号设置一次,之后即使角色后来失去了在房间中的席位也不会清除。请将其用于 ConversationAvailability 任何需要对玩家输入进行门控的场景。
验证门控
进入 Play 模式,连接后,在角色尚未被确认之前尝试输入或按发送。门控应阻止该操作,直到可用性报告为止 就绪 或 Answering。在对话中途断开该角色,并确认门控会再次关闭。
下一步
响应玩家开始说话对话可用性参考最后更新于
这有帮助吗?