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

Vuforia+Unity开发:锁定VuMark挂载物体尺寸不随距离缩放

解决VuMark追踪时虚拟物体屏幕尺寸固定的问题

嘿,我明白你要的效果——不管VuMark离AR相机多近多远,挂载在上面的虚拟物体在屏幕上看起来大小始终不变对吧?之前锁定Y轴没用是因为那只固定了物体在3D空间里的位置/旋转,没解决透视投影带来的视觉缩放问题。下面给你两个实用的解决方案:

方案一:动态缩放脚本(最通用的3D场景方案)

核心思路是:根据VuMark到相机的实时距离,反向调整物体缩放比例,抵消透视带来的视觉大小变化。

  1. 创建一个C#脚本(命名为FixedScreenSize.cs),挂载到你的虚拟物体上:
using UnityEngine;
using Vuforia;

public class FixedScreenSize : MonoBehaviour
{
    // 参考距离:比如设置为1米,代表物体在1米远时的基准大小
    public float referenceDistance = 1f;
    // 初始缩放:物体在参考距离下的默认大小
    public Vector3 initialScale = Vector3.one;
    // 关联VuMark的追踪组件(可自动查找)
    public VuMarkBehaviour vuMarkBehaviour;

    private Camera arCamera;

    void Start()
    {
        arCamera = Camera.main;
        // 如果没手动指定VuMark组件,自动从父物体查找
        if (vuMarkBehaviour == null)
            vuMarkBehaviour = GetComponentInParent<VuMarkBehaviour>();
    }

    void Update()
    {
        // 仅当VuMark被追踪时执行缩放调整
        if (vuMarkBehaviour != null && vuMarkBehaviour.IsTracked)
        {
            // 计算VuMark到相机的直线距离
            float distance = Vector3.Distance(vuMarkBehaviour.transform.position, arCamera.transform.position);
            // 缩放比例 = 参考距离 / 当前距离(距离越近,缩放比例越小,抵消透视放大)
            float scaleFactor = referenceDistance / distance;
            // 应用缩放,保持物体初始比例
            transform.localScale = initialScale * scaleFactor;
        }
    }
}
  1. 在Inspector面板配置参数:

    • Reference Distance:设置一个你觉得合适的基准距离(比如1米)
    • Initial Scale:调整物体在基准距离下的显示大小
    • VuMark Behaviour:拖入VuMark对象上的VuMarkBehaviour组件(如果脚本挂在VuMark子物体上,可留空让脚本自动查找)
  2. 测试运行:此时VuMark靠近/远离相机时,虚拟物体的屏幕显示尺寸会保持固定。

方案二:改用正交相机(适合2D/UI类物体)

如果你的虚拟物体是2D图标、UI弹窗这类不需要3D透视的内容,可以直接修改AR相机的投影模式:

  • 选中AR Camera,在Camera组件里把Projection从Perspective改为Orthographic
  • 调整Orthographic Size参数,控制整体视野大小,确保虚拟物体显示尺寸符合预期

注意:这个方法会让所有AR内容失去透视效果,只适合不需要真实3D空间感的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:41:42