using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using static UnityEngine.UI.AspectRatioFitter;
//挂载到RawImage上即可
[RequireComponent(typeof(AspectRatioFitter))]
[RequireComponent(typeof(RawImage))]
public class Webcam_Test : MonoBehaviour
{
private WebCamTexture cameraTexture;
//加上AspectRatioFitter组件调整画面尺寸
RawImage background;
AspectRatioFitter fit;
void Start()
{
InitData();
StartCoroutine("InitCameraCor");
}
// Update is called once per frame
void Update()
{
//调整rawimage
AdjustmentRawimage();
}
void InitData()
{
background = this.transform.GetComponent<RawImage>();
fit = this.transform.GetComponent<AspectRatioFitter>();
fit.aspectMode = AspectMode.EnvelopeParent;
}
/// <summary>
/// 初始化摄像头
/// </summary>
public IEnumerator InitCameraCor()
{
yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);
if (Application.HasUserAuthorization(UserAuthorization.WebCam))
{
WebCamDevice[] devices = WebCamTexture.devices;
var DeviceName = devices[0].name;
//判断平台
if (Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.IPhonePlayer)
{
for (int i = 0; i < devices.Length; i++)
{
//开启后置摄像头
if (!devices[i].isFrontFacing)
{
DeviceName = devices[i].name;
break;
}
}
}
cameraTexture = new WebCamTexture(DeviceName, Screen.width, Screen.height, 15);
cameraTexture.Play(); // Start the camera
background.texture = cameraTexture; // Set the texture
}
}
void AdjustmentRawimage()
{
if (cameraTexture == null) return;
float ratio = (float)cameraTexture.width / (float)cameraTexture.height;
fit.aspectRatio = ratio; // Set the aspect ratio
float scaleY = cameraTexture.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 = -cameraTexture.videoRotationAngle;
background.rectTransform.localEulerAngles = new Vector3(0, 0, orient);
}
//这下面的是我跳转到AR场景当中的,需要把上个场景中的webcamTexture关闭。
//没有这一需求的小伙伴门可以忽略
//private void OnDestroy()
//{
// cameraTexture.Stop();
// cameraTexture = null;
//}
}