关于在自定义脚本中访问MRTK BoundsControl组件的技术问询
MRTK自定义脚本访问BoundsControl的问题解答
首先明确:MRTK的BoundsControl脚本完全可以被自定义脚本访问,它属于MRTK公开的UI组件API,只要正确引用命名空间就能正常调用。
你的代码里存在两处明显错误:
- 变量赋值无效:
GameObject targetObject = targetObject;这行代码是把变量赋值给自身,等于没有获取到光标碰撞到的真实目标对象。你需要通过MRTK的指针交互事件(比如IMixedRealityPointerHandler接口的回调)或者原生碰撞检测(如OnTriggerEnter)来获取实际的目标GameObject。 GetComponent()调用不完整:你没有指定要获取的组件类型,正确写法应该是targetObject.GetComponent<BoundsControl>(),同时必须在脚本顶部引入Microsoft.MixedReality.Toolkit.UI命名空间,否则编译器无法识别BoundsControl类型。
修正后的示例代码:
using UnityEngine; using Microsoft.MixedReality.Toolkit.UI; using Microsoft.MixedReality.Toolkit.Input; public class CursorBoundsControlEnabler : MonoBehaviour, IMixedRealityPointerHandler { public void OnPointerDown(MixedRealityPointerEventData eventData) { // 获取指针命中的目标对象 GameObject target = eventData.Pointer.Result.CurrentPointerTarget; if (target != null) { // 查找目标对象或其父物体上的BoundsControl BoundsControl boundsControl = target.GetComponentInParent<BoundsControl>(); if (boundsControl != null) { boundsControl.enabled = true; } } } // 实现IMixedRealityPointerHandler接口的其他必填方法 public void OnPointerDragged(MixedRealityPointerEventData eventData) { } public void OnPointerUp(MixedRealityPointerEventData eventData) { } public void OnPointerClicked(MixedRealityPointerEventData eventData) { } }
额外注意事项:
- 确保目标GameObject(或其父层级对象)上确实挂载了BoundsControl组件,否则
GetComponent或GetComponentInParent会返回null - 如果BoundsControl默认是禁用状态,启用后才会显示缩放、旋转手柄
- 使用MRTK原生的指针交互接口比原生碰撞检测更适配混合现实场景,能更好处理MR中的交互逻辑
内容的提问来源于stack exchange,提问作者Vedant
相关产品推荐
相关产品推荐

