using System.Collections; using System.Collections.Generic; using UnityEngine; namespace MartellController { /// /// 相机管理器 /// 并在相机初始化后返回贴图 /// public class CameraManager : MonoBehaviour { public static CameraManager Instance; private WebCamDevice iosCamDevice; private static WebCamTexture iosCamTexture; private string cameraName = "Logitech BRIO"; private int cameraWidth; private int cameraHeight; private int cameraFPS = 60; // ================================================== private void Awake() { Instance = this; } private void Start() { Init(); } private void OnApplicationQuit() { UnInit(); } // ================================================== private void Init() { StartCoroutine("RequestCameraAuthorization"); return; } private void UnInit() { iosCamTexture.Stop(); return; } /// /// 获取相机使用权限 /// /// private IEnumerator RequestCameraAuthorization() { yield return Application.RequestUserAuthorization(UserAuthorization.WebCam); if (Application.HasUserAuthorization(UserAuthorization.WebCam)) { LogManager.Log("已获取相机权限"); CreateCamera(); } else { LogManager.ErrorLog("无法获取相机权限"); StartCoroutine("RequestCameraAuthorization"); } yield break; } private static bool isCameraCreated = false; private void CreateCamera() { if (WebCamTexture.devices.Length <= 0) { LogManager.ErrorLog("设备无可用相机"); return; } #if UNITY_EDITOR // 编辑器使用罗技 foreach (WebCamDevice device in WebCamTexture.devices) { if (device.name == cameraName) { iosCamDevice = device; } } iosCamTexture = new WebCamTexture(iosCamDevice.name, cameraWidth, cameraHeight, cameraFPS); #else // IOS使用0号相机 iosCamDevice = WebCamTexture.devices[0]; iosCamTexture = new WebCamTexture(iosCamDevice.name); #endif iosCamTexture.Play(); isCameraCreated = true; LogManager.Log($"Name :{iosCamTexture.deviceName} / Width:{iosCamTexture.width} / Height:{iosCamTexture.height} / FPS:{iosCamTexture.requestedFPS}"); LogManager.Log("相机初始化完成"); return; } /// /// 返回相机贴图 /// /// public static Texture GetCamTexture() { if (isCameraCreated) { return iosCamTexture; } else { return null; } } } }