在Unity项目中新建一个C# Script, 名曰CameraController.
Unity提供了WebCamTexture类供开发者进行相机相关的开发。所以我们调用设备相机的功能也是在这个类里面。
实现调用相机功能需要RawImage和AspectRatioFitter这两个类,因此需要使用UnityEngine.UI space.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
声明bool变量camAvailable.
private bool camAvailable;
这样写Start()函数:
void Start () {
defaultBackground = background.texture;
WebCamDevice[] devices = WebCamTexture.devices;
if (devices.Length == 0)//如果没有检测到任何设备,camAvailable=false,返回
{
Debug.Log("No camera found.");
camAvailable = false;
return;
}
for (int i = 0; i < devices.Length; i++)
{
if (!devices[i].isFrontFacing)//isFrontFacing is true if the camera face the same direction as the screen.取正面主相机,不是自拍相机
{
backCamera = new WebCamTexture(devices[i].name, Screen.width, Screen.height);
}
}
if (backCamera == null)//如果没有检测到主相机,返回
{
Debug.Log("Can't find back camera.");
return;
}
backCamera.Play();//启动相机
background.texture = backCamera;//令defalut背景展示相机的画面
camAvailable = true;
}
Update():
void Update()
{
if (!camAvailable)
return;
float ratio = (float)backCamera.width / (float)backCamera.height;
fit.aspectRatio = ratio; // Set the aspect ratio
float scaleY = backCamera.videoVerticallyMirrored ? -1f : 1f; // Find if the camera is mirrored or not
background.rectTransform.localScale = new Vector3(1f, scaleY, 1f); // Swap the mirrored camera
//int orient = -backCamera.videoRotationAngle;
//background.rectTransform.localEulerAngles = new Vector3(0, 0, orient);
}
参考: