如何通过代码为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
相关产品推荐
相关产品推荐

