我正试图使用Unity 2018和C#获得物理设备的分辨率相机,所以我创建了一个3D对象立方体,并在其中附加了以下脚本:
IEnumerator CameraResolution()
{
WebCamDevice[] devices = WebCamTexture.devices;
Debug.Log("Number of web cams connected: " + devices.Length);
for (int i = 0; i < devices.Length; i++)
{
string camName = devices[i].name;
Debug.Log("selected webcam name is " + camName);
if (backCam == null)
backCam = new WebCamTexture();
backCam.deviceName = camName;
GetComponent<Renderer>().material.mainTexture = backCam;
if (!backCam.isPlaying)
backCam.Play();
float h = backCam.height;
float w = backCam.width;
Debug.Log("The camera pixel is: " + (w / h) );
yield return null;
}
backCam.Stop();
}
然而,当我午餐时得到了一个错误的结果这个脚本:
在此处输入图像描述
我想举一个这样的例子:相机像素为:64MP。
代码中的一些缺陷:
通过记录
w / h
你只会看到宽度和高度的比例。
而是记录,例如
Debug.Log($"The camera resolution is {w} x {h} pixels", this);
此外,您始终只能通过默认构造函数创建一个WebCamTexture
,该构造函数自动使用默认相机设备,因此始终具有相同的分辨率。
注意API 中的这些要点
只有在相机未运行时设置此选项才会产生效果。
>你开始一次纹理,然后永远不要停止它,直到整个循环已经完成。
注意:如果你想使用WebCamTexture从通过Unity Remote连接的设备中获取相机流,那么你必须通过构造函数初始化它。无法使用WebCamTexture.deviceName将设备从常规设备更改为远程设备,反之亦然。
>与其设置名称,不如通过构造函数创建新纹理,那么你应该保存
你想做的是例如
IEnumerator CameraResolution()
{
WebCamDevice[] devices = WebCamTexture.devices;
Debug.Log("Number of web cams connected: " + devices.Length);
for (int i = 0; i < devices.Length; i++)
{
string camName = devices[i].name;
Debug.Log("selected webcam name is " + camName);
backCam = new WebCamTexture(camName);
GetComponent<Renderer>().material.mainTexture = backCam;
backCam.Play();
float h = backCam.height;
float w = backCam.width;
Debug.Log($"The {camName} camera resolution is {w} x {h} pixels", this);
yield return null;
backCam.Stop();
Destroy(backCam);
}
}
此外,如果您已经知道支持的分辨率,可以在开始播放之前尝试设置requestedHeight
和requestedWidth
。