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

使用MRUK Kit时,如何基于桌面尺寸缩放GameObject

解决MRUK Kit访问空间锚点并按桌面尺寸缩放对象的方案

1. 获取Find Spawn Position模块的空间锚点

MRUK Kit的FindSpawnPosition组件在平面检测成功后会自动生成空间锚点,直接从组件实例中即可获取:

private FindSpawnPosition _spawnModule;

void Start()
{
    _spawnModule = GetComponent<FindSpawnPosition>();
    // 监听平面检测完成事件
    _spawnModule.OnPlaneDetected.AddListener(HandlePlaneDetected);
}

void HandlePlaneDetected()
{
    SpatialAnchor spawnAnchor = _spawnModule.SpawnAnchor;
    if (spawnAnchor != null)
    {
        ScaleObjectToDesktop(spawnAnchor);
    }
}

2. 提取桌面尺寸并缩放对象

从空间锚点关联的XRPlane组件中获取平面边界,再按比例缩放目标对象:

void ScaleObjectToDesktop(SpatialAnchor anchor)
{
    XRPlane desktopPlane = anchor.GetComponent<XRPlane>();
    if (desktopPlane == null) return;

    // 计算桌面实际尺寸(extents是半长,所以乘2)
    Vector2 desktopSize = new Vector2(desktopPlane.extents.x * 2, desktopPlane.extents.z * 2);
    
    GameObject spawnedObj = _spawnModule.SpawnedObject;
    // 按桌面尺寸与对象初始尺寸的比例缩放,留10%边距避免超出
    float scaleX = (desktopSize.x / spawnedObj.transform.localScale.x) * 0.9f;
    float scaleZ = (desktopSize.y / spawnedObj.transform.localScale.z) * 0.9f;
    // 取较小的比例保证对象完全在桌面内
    float finalScale = Mathf.Min(scaleX, scaleZ);
    
    spawnedObj.transform.localScale = new Vector3(finalScale, spawnedObj.transform.localScale.y, finalScale);
}

关键注意点

  • 确保FindSpawnPosition组件的Spawn Object字段已绑定你要放置的GameObject
  • 必须在平面检测完成后访问锚点,否则会出现空引用
  • 缩放时保持对象高度不变,只调整平面内的尺寸比例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 02:49:56