**一.
**首先我们需要简单认识一下,unity有关摄像头需要用到的内置类;
WebCamDevice
官方文档:https://docs.unity3d.com/ScriptReference/WebCamDevice.html
WebCamTexture
官方文档:https://docs.unity3d.com/ScriptReference/WebCamTexture.html
**二. **
新建一个Unity3d 项目,在场景中新建Resources文件夹、Material文件夹,在文件夹中新建一个材质
CameraPlane.mat
;并且材质球的
Shader:Unlit/Texture
.
三.
在场景中新建一个Camera,并且把对象重新命名为WebCamera,在WebCamera下面添加一个子对象Plane[PlaneMeshRender],注意点是:
** (1).
**plane的Rotation (X:90 Y:180 Z:0)如果不修改 ,显示的画面,会相反显示;
**(2).
**需要MeshRender,把第一步操作的材质球附加上。
**四.
**到这一步,就是比较重点了,在WebCamera上附加一个WebCameraManager.cs 组件类,主要是处理调用外部摄像头,并且显示摄像的内容。
WebCameraManager.cs 代码如下:
[AppleScript] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
using
System.Collections;
using
System.Collections.Generic;
using
UnityEngine;
public
class
WebCameraManager
:
MonoBehaviour
{
public
string
DeviceName;
public Vector
2
CameraSize;
public float CameraFPS;
/
/
接收返回的图片数据
WebCamTexture _webCamera;
public GameObject Plane;
/
/
作为显示摄像头的面板
void OnGUI
(
)
{
if
(
GUI.Button
(
new
Rect
(
100
,
100
,
100
,
100
)
,
"Initialize Camera"
)
)
{
StartCoroutine
(
"InitCameraCor"
)
;
}
/
/
添加一个按钮来控制摄像机的开和关
if
(
GUI.Button
(
new
Rect
(
100
,
250
,
100
,
100
)
,
"ON/OFF"
)
)
{
if
(
_webCamera !
=
null
&
&
Plane !
=
null
)
{
if
(
_webCamera.isPlaying
)
StopCamera
(
)
;
else
PlayCamera
(
)
;
}
}
if
(
GUI.Button
(
new
Rect
(
100
,
450
,
100
,
100
)
,
"Quit"
)
)
{
Application.Quit
(
)
;
}
}
public void PlayCamera
(
)
{
Plane.GetComponent
<
MeshRenderer
(
)
.
enabled
=
true
;
_webCamera.Play
(
)
;
}
public void StopCamera
(
)
{
Plane.GetComponent
<
MeshRenderer
(
)
.
enabled
=
false
;
_webCamera.Stop
(
)
;
}
/
/
/
<
summary
/
/
/
初始化摄像头
/
/
/
<
/
summary
public IEnumerator InitCameraCor
(
)
{
yield
return
Application.RequestUserAuthorization
(
UserAuthorization.WebCam
)
;
if
(
Application.HasUserAuthorization
(
UserAuthorization.WebCam
)
)
{
WebCamDevice[] devices
WebCamTexture.devices;
DeviceName
devices[
0
].
name
;
_webCamera
new
WebCamTexture
(
DeviceName
,
(
int
)
CameraSize.x
,
(
int
)
CameraSize.y
,
(
int
)
CameraFPS
)
;
Plane.GetComponent
<
Renderer
(
)
.material.mainTexture
=
_webCamera;
Plane.transform.localScale
new
Vector
3
(
1
,
1
,
1
)
;
_webCamera.Play
(
)
;
}
}
}
**五.
** 最后直接运行看效果哈!
摄像头