Unity Vuforia视频尺寸大于图像目标问题求助
解决Vuforia视频播放超出图像目标的问题
我之前也碰到过一模一样的情况,核心问题就是视频和自定义图像目标的比例不匹配——Vuforia示例里的视频和目标比例是适配好的,换成你500x732的自定义目标后,默认缩放逻辑就失效了。下面给你一步步的解决办法:
1. 先理清比例差异
你的图像目标比例是 500/732≈0.683,先确认你的视频分辨率比例是否和这个一致。如果能把视频转成和目标完全一致的比例,这是最省心的解决方案,不用改代码就能完美适配。
如果必须用现有比例的视频,就继续往下看代码调整的方法。
2. 修改VideoPlaybackBehaviour.cs的动态缩放逻辑
你已经获取了视频的宽高,接下来把比例适配的逻辑加进去,替换原来的固定缩放逻辑:
// 就在你现有获取videoWidth、videoHeight的代码块里添加 int videoWidth = mVideoPlayer.GetVideoWidth(); int videoHeight = mVideoPlayer.GetVideoHeight(); if (videoWidth > 0 && videoHeight > 0) { // 获取当前图像目标的物理尺寸(Vuforia里单位是米,500mm会转成0.5m) TrackableBehaviour trackable = GetComponent<TrackableBehaviour>(); if (trackable != null && trackable.Trackable is ImageTarget) { ImageTarget imageTarget = (ImageTarget)trackable.Trackable; Vector2 targetSize = imageTarget.GetSize(); // 计算目标和视频的比例 float targetAspect = targetSize.x / targetSize.y; float videoAspect = (float)videoWidth / videoHeight; // 获取视频渲染用的Quad对象 Transform videoQuad = mVideoPlayer.GetVideoPlayerTransform(); if (videoQuad == null) return; // 两种适配模式选一种: // 模式1:视频填满目标(超出部分裁剪,无黑边) float scaleX, scaleY; if (videoAspect > targetAspect) { // 视频更宽,按目标高度适配 scaleY = targetSize.y; scaleX = scaleY * videoAspect; } else { // 视频更高,按目标宽度适配 scaleX = targetSize.x; scaleY = scaleX / videoAspect; } // 模式2:视频完全显示(不裁剪,保留黑边) // if (videoAspect > targetAspect) // { // scaleX = targetSize.x; // scaleY = scaleX / videoAspect; // } // else // { // scaleY = targetSize.y; // scaleX = scaleY * videoAspect; // } // 设置Quad的缩放,让视频适配目标 videoQuad.localScale = new Vector3(scaleX, scaleY, 1f); } }
3. 检查Unity中的图像目标设置
最后确认你的ImageTarget GameObject的局部缩放是(1,1,1)——Vuforia会根据你在Target Manager里设置的物理尺寸自动调整显示大小,手动改缩放会打乱比例,导致视频适配完全错误。
内容的提问来源于stack exchange,提问作者Kanagalingam
相关产品推荐
相关产品推荐

