我一直在开发这个 Windows 应用程序,最近接到任务将其切换到 WebGL。
一切都进展顺利,除了网络摄像头分辨率,我似乎无法正常工作...我需要 16:9 分辨率,但无论我做什么,它似乎默认为 480 x 640。
这是我在编辑器、Windows 和 Android 版本中运行的代码:
public IEnumerator RefreshCamera()
{
if (camTexture != null)
{
Display.texture = null;
camTexture.Stop();
camTexture = null;
}
else
{
WebCamDevice device = WebCamTexture.devices[currentCamIndex];
camTexture = new WebCamTexture(device.name, 576, 1024, 24);
camTexture.requestedHeight = 576;
camTexture.requestedWidth = 1024;
camTexture.requestedFPS = 24;
Display.texture = camTexture;
camTexture.Play();
}
yield return new WaitForEndOfFrame();
}
当我在设置 camTexture 变量时设置请求的分辨率时,这在任何平台上都不起作用,默认为 480 x 640。然而,接下来的几行似乎在 Windows、编辑器和 Android 上起作用。无论我做什么,WebGL 始终默认为 480 x 640...
我在文档中看到IOS不支持requestedHeight/requestedWidth,但没有提到WebGL。
非常感谢您的帮助。
谢谢你
这是 Unity 的错误。 为了在浏览器中获取网络摄像头信息,Unity 使用以下代码:
navigator.mediaDevices.getUserMedia({
audio: false,
video: videoInputDevices[deviceId].deviceId ? {
deviceId: { exact: videoInputDevices[deviceId].deviceId }
} : true
}).then(function(stream) {...}
Unity 不请求相机功能,并且 getUserMedia() 返回最小可用分辨率 (640x480)。 我们应该为 getUserMedia() 设置自定义约束。例如:
navigator.mediaDevices.getUserMedia({
audio: false,
video: videoInputDevices[deviceId].deviceId ? {
deviceId: {
exact: videoInputDevices[deviceId].deviceId
},
width: { min: 640, ideal: 1280, max: 1920 },
height: { min: 480, ideal: 720, max: 1080 },
} : true
}).then(function(stream) {...}
您可以将此代码添加到您的 [projectname].framework.js 文件中(每次构建后都需要重复),或者可能使用 mergeInto 函数覆盖 JS_WebCamVideo_Start 方法。