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

关于在自定义脚本中访问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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:48:21