最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
用unity开发kinect拍照片
2015年01月26日 09:22
0 点赞
1 评论
更新于 2025-11-21 15:26
问题提出
我想要使用Unity开发基于Kinect的拍照功能。由于拍照需要先调用摄像头,然而Kinect自带摄像头的分辨率较低,拍摄出的照片效果不理想,所以我打算更换一个高清摄像头。但我不知道该如何编写代码来实现这一需求。
单独调用外部摄像头的方法
以下是我在不使用Kinect的情况下,单独调用外部摄像头的代码:
public string deviceName;
WebCamTexture tex;
// Use this for initialization
IEnumerator Start()
{
// 获取授权
yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);
if (Application.HasUserAuthorization(UserAuthorization.WebCam))
{
WebCamDevice[] devices = WebCamTexture.devices;
print(devices.Length);
deviceName = devices[0].name;
tex = new WebCamTexture(deviceName, 1400, 900, 12);
renderer.material.mainTexture = tex;
tex.Play();
}
else
{
// 这里可以添加用户未授权时的处理逻辑
}
}
代码解释
- 变量声明:
deviceName:用于存储外部摄像头的名称。tex:WebCamTexture类型的变量,用于获取和显示摄像头的图像。
Start方法:- 该方法是一个协程,使用
IEnumerator类型。在Start方法中,首先使用Application.RequestUserAuthorization向用户请求使用摄像头的授权。 - 当用户授权后,通过
WebCamTexture.devices获取所有可用的摄像头设备列表。 - 打印出可用摄像头的数量,并将第一个摄像头的名称赋值给
deviceName。 - 创建一个
WebCamTexture对象,指定摄像头名称、分辨率(1400x900)和帧率(12fps)。 - 将
WebCamTexture对象赋值给渲染器的材质主纹理,并调用Play方法开始播放摄像头的图像。
- 该方法是一个协程,使用
遇到的问题
使用上述调用外部摄像头的代码后,Kinect的摄像头无法正常使用,并且一直报以下错误:
Could not start graph
UnityEngine.WebCamTexture:Play()
<Start>c__Iterator2:MoveNext() (at Assets/ZigFu/Scripts/Viewers/ZigToVM.cs:20)
Could not pause pControl
UnityEngine.WebCamTexture:Play()
<Start>c__Iterator2:MoveNext() (at Assets/ZigFu/Scripts/Viewers/ZigToVM.cs:20)
目前我不清楚出现这些错误的原因,希望有大神能帮忙解答。