You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过代码为MRTK中的Interactable组件动态绑定交互事件

MRTK Interactable 动态绑定点击事件的正确方式

原有代码未指定InteractableEvent的触发事件类型,MRTK无法识别该事件对应的触发时机,因此回调不会生效。

正确实现代码

在原有循环的// TODO位置替换为以下代码:

// 先缓存Interactable组件,避免重复调用GetComponent损耗性能
var interactable = country.gameObject.GetComponent<Microsoft.MixedReality.Toolkit.UI.Interactable>();

// 解决循环闭包捕获问题,创建本地临时变量存储当前国家对象
var currentCountry = country;

// 初始化点击事件
Microsoft.MixedReality.Toolkit.UI.InteractableEvent clickEvent = new Microsoft.MixedReality.Toolkit.UI.InteractableEvent();
// 指定触发事件为点击事件,EventName必须严格匹配MRTK内置的事件名
clickEvent.EventName = "OnClick";
// 绑定对应的回调方法,也可以用lambda传递自定义参数
clickEvent.Event.AddListener(() => {
    currentCountry.GetComponent<CountrySelected>()?.printName();
});

// 将事件添加到Interactable的事件列表中
interactable.InteractableEvents.Add(clickEvent);

注意事项

  • EventName的取值必须正确,MRTK 2.x内置的常用事件名还有OnPress、OnRelease、OnFocusEnter、OnFocusExit等,可根据需求替换。
  • 代码中加入了?.空值判断,避免国家对象未挂载CountrySelected脚本时抛出空引用异常。
  • 如果需要动态替换事件,可在添加新事件前调用interactable.InteractableEvents.Clear()清空已有事件,避免重复绑定触发多次回调。

内容的提问来源于stack exchange,提问作者Ignacio Alorre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:54:08