Unity2022+MRTK3中Text Mesh Pro对象无法通过凝视交互的问题求助
MRTK3中TextMeshPro与StatefulInteractable凝视交互失效的排查方案
核心排查点
- 碰撞体缺失:StatefulInteractable依赖碰撞体接收凝视交互信号,TextMeshPro对象默认无碰撞体。给TextMeshPro添加
Box Collider(适配文本范围)或Mesh Collider,确保碰撞体覆盖文本区域,且不要勾选Is Trigger(除非交互逻辑需要)。 - 交互层不匹配:检查TextMeshPro对象的Layer是否在GazeInteractor的检测范围内。打开GazeInteractor组件,查看
Interaction Layer Mask,确认包含TextMeshPro所在的Layer(默认通常是UI或Interactable层)。 - StatefulInteractable配置错误:
- 确认组件的
Hover Type设置为Gaze(或包含Gaze的复合选项),部分默认配置可能仅响应触摸/手柄交互。 - 检查
Is Enabled是否勾选,未被脚本或编辑器禁用。 - 事件绑定逻辑需严谨:凝视进入时显示文本并取消之前的延迟隐藏调用;凝视退出时启动2秒延迟隐藏。示例逻辑:
public TMP_Text targetText; public void ShowText() { targetText.enabled = true; CancelInvoke(nameof(HideText)); // 取消未执行的延迟隐藏,避免冲突 } public void StartHideDelay() { Invoke(nameof(HideText), 2f); } private void HideText() { targetText.enabled = false; }
- 确认组件的
- TextMeshPro自身状态问题:若用
gameObject.SetActive(false)设置初始隐藏,会导致碰撞体失效,无法被凝视检测。建议改用TMP_Text.enabled = false控制显示状态,保持对象激活。同时排查是否有其他脚本修改文本显示状态,覆盖了StatefulInteractable的事件效果。 - MRTK3交互系统配置:确认场景已正确配置
XR Origin和Gaze输入模块,Gaze Provider组件正常启用。检查StatefulInteractable的Interactors Allowed设置,确保包含GazeInteractor类型。
关键注意事项
不要通过激活/禁用TextMeshPro对象控制显示,必须保持对象激活,仅修改文本组件的enabled状态,否则碰撞体无法被GazeInteractor检测,StatefulInteractable自然无法触发事件。
内容的提问来源于stack exchange,提问作者Khushi Naik
相关产品推荐
相关产品推荐

