Vuforia+Unity开发:锁定VuMark挂载物体尺寸不随距离缩放
解决VuMark追踪时虚拟物体屏幕尺寸固定的问题
嘿,我明白你要的效果——不管VuMark离AR相机多近多远,挂载在上面的虚拟物体在屏幕上看起来大小始终不变对吧?之前锁定Y轴没用是因为那只固定了物体在3D空间里的位置/旋转,没解决透视投影带来的视觉缩放问题。下面给你两个实用的解决方案:
方案一:动态缩放脚本(最通用的3D场景方案)
核心思路是:根据VuMark到相机的实时距离,反向调整物体缩放比例,抵消透视带来的视觉大小变化。
- 创建一个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; } } }
在Inspector面板配置参数:
Reference Distance:设置一个你觉得合适的基准距离(比如1米)Initial Scale:调整物体在基准距离下的显示大小VuMark Behaviour:拖入VuMark对象上的VuMarkBehaviour组件(如果脚本挂在VuMark子物体上,可留空让脚本自动查找)
测试运行:此时VuMark靠近/远离相机时,虚拟物体的屏幕显示尺寸会保持固定。
方案二:改用正交相机(适合2D/UI类物体)
如果你的虚拟物体是2D图标、UI弹窗这类不需要3D透视的内容,可以直接修改AR相机的投影模式:
- 选中AR Camera,在
Camera组件里把Projection从Perspective改为Orthographic - 调整
Orthographic Size参数,控制整体视野大小,确保虚拟物体显示尺寸符合预期
注意:这个方法会让所有AR内容失去透视效果,只适合不需要真实3D空间感的场景。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

