注意力与引用锚定
在运行时更新 NPC 的关注焦点,以便 Convai 将“捡起那个”或“去那里”之类模糊的玩家引用解析为正确的已注册场景对象。
最后更新于
这有帮助吗?
这有帮助吗?
// 按对象名称设置
character.SetCurrentAttentionObject("Extinguisher");
// 按定义引用设置
character.SetCurrentAttentionObject(myObjectDefinition);
// 清除 — NPC 没有特定关注点
character.ClearCurrentAttentionObject();void SetCurrentAttentionObject(string objectName, string runLlm = "false")
void SetCurrentAttentionObject(ConvaiActionObjectDefinition actionObject, string runLlm = "false")
void ClearCurrentAttentionObject(string runLlm = "false")// 静默更新 — NPC 不会口头反应
character.SetCurrentAttentionObject("GasValve");
// NPC 可能会口头回应焦点变化
character.SetCurrentAttentionObject("GasValve", runLlm: "true");using Convai.Runtime.Components;
using Convai.Shared.Actions;
using UnityEngine;
using UnityEngine.EventSystems;
public sealed class EquipmentFocusTracker : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
[SerializeField] private ConvaiCharacter _instructor;
[SerializeField] private ConvaiActionObjectDefinition _objectDefinition;
public void OnPointerEnter(PointerEventData eventData)
{
_instructor.SetCurrentAttentionObject(_objectDefinition);
}
public void OnPointerExit(PointerEventData eventData)
{
_instructor.ClearCurrentAttentionObject();
}
}using Convai.Runtime.Components;
using UnityEngine;
public sealed class ProximityAttentionTrigger : MonoBehaviour
{
[SerializeField] private ConvaiCharacter _instructor;
[SerializeField] private string _objectName;
private void OnTriggerEnter(Collider other)
{
if (!other.CompareTag("Player")) return;
_instructor.SetCurrentAttentionObject(_objectName);
}
private void OnTriggerExit(Collider other)
{
if (!other.CompareTag("Player")) return;
_instructor.ClearCurrentAttentionObject();
}
}