using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using Serenegiant.UVC; using UnityEngine.UI; namespace InfraredManager { public class InfraredCameraHelper { #region 单例 private static InfraredCameraHelper _Instance; public static InfraredCameraHelper GetInstance() { if (_Instance == null) _Instance = new(); return _Instance; } #endregion #region 创建销毁 private GameObject _managerObject; private ScreenLocate _screenLocate; public static List InfraredCameraHelperRawImageList = new(); public void Create() { if (_managerObject) return; string prefabName = "WebCameraView"; var o = UnityEngine.Object.Instantiate(Resources.Load(prefabName)); UnityEngine.Object.DontDestroyOnLoad(o); o.name = prefabName; _screenLocate = o.GetComponent(); _screenLocate.InfraredCameraHelper = this; _managerObject = o; if (Application.platform == RuntimePlatform.Android) Application.targetFrameRate = 60; //for (int i = 0; i < InfraredCameraHelperRawImageList.Count; i++) //{ // //添加目标 // _screenLocate.mUVCDrawer.RenderTargets.Add(InfraredCameraHelperRawImageList[i].gameObject); //} } public void Dispose() { if (_managerObject) UnityEngine.Object.DestroyImmediate(_managerObject); if (_Instance == this) _Instance = null; } #endregion #region 画面接口 public void onStartPreview() { Debug.Log("onStartPreview_screenLocate.mUVCCameraInfo.device:" + _screenLocate.mUVCCameraInfo.device); _screenLocate.mUVCManager.onStartPreview(_screenLocate.mUVCCameraInfo.device); } public void onStopPreview() { Debug.Log("onStopPreview_screenLocate.mUVCCameraInfo.device:" + _screenLocate.mUVCCameraInfo.device); _screenLocate.mUVCManager.onStopPreview(_screenLocate.mUVCCameraInfo.device); } /// /// 获取摄像机对象CameraInfo /// public UVCManager.CameraInfo GetUVCCameraInfo() { return _screenLocate.mUVCCameraInfo; } /// /// 获取相机画面贴图 /// public Texture GetCameraTexture() { return _screenLocate.getUVCTexture; //_screenLocate.rawImage.texture; } /// /// 获取相机画面材质 /// public Material GetCameraMaterial() { return null;//_screenLocate.rawImage.material; } /// /// 设置亮度(0~10) /// public void SetBrightness(float value) { _screenLocate.rawImage.material.SetFloat("_Brightness", value); } /// /// 获取亮度(0~10) /// public float GetBrightness() { return _screenLocate.rawImage.material.GetFloat("_Brightness"); } /// /// 设置饱和度(0~10) /// public void SetSaturation(float value) { _screenLocate.rawImage.material.SetFloat("_Saturation", value); } /// /// 获取饱和度(0~10) /// public float GetSaturation() { return _screenLocate.rawImage.material.GetFloat("_Saturation"); } /// /// 设置对比度(0~10) /// public void SetContrast(float value) { _screenLocate.rawImage.material.SetFloat("_Contrast", value); } /// /// 获取对比度(0~10) /// public float GetContrast() { return _screenLocate.rawImage.material.GetFloat("_Contrast"); } /// /// 设置相机画面分辨率 /// public void SetCameraResolution(int width, int height) { _screenLocate.mUVCManager.DefaultWidth = width; _screenLocate.mUVCManager.DefaultHeight = height; _screenLocate.mUVCDrawer.DefaultWidth = width; _screenLocate.mUVCDrawer.DefaultHeight = height; Debug.Log("设置分辨率,width:" + width + " ,height:" + height); } /// /// 设置相机画面分辨率 /// public void SetCameraResolutionNew(int width, int height) { Debug.Log("设置分辨率,width:" + width + " ,height:" + height); _screenLocate.Resize(width, height); } /// /// 获取相机画面分辨率 /// public Vector2 GetCameraResolution() { return new Vector2( _screenLocate.mUVCDrawer.DefaultWidth, _screenLocate.mUVCDrawer.DefaultHeight ); } #endregion #region 操作接口 /// /// 单点模式开关 /// public void SetSinglePoint(bool value) { _screenLocate.bSinglePoint = value; } /// /// 是否为单点模式 /// public bool IsSinglePoint() { return _screenLocate.bSinglePoint; } /// /// 设置抖动过滤值 /// public void SetShakeFilterValue(float value) { _screenLocate.filterDis = value; } /// /// 获取抖动过滤值 /// public float GetShakeFilterValue() { return _screenLocate.filterDis; } /// /// 设置亮度过滤阈值 /// public void SetInfraredLocateBrightnessThreshold(float value) { _screenLocate.SetInfraredLocateBrightnessThreshold(value); } /// /// 是否已经定位 /// public bool IsScreenLoateOK() { return _screenLocate.IsScreenLoateOK(); } /// /// 是否正在手动定位 /// public bool IsScreenLocateManualDoing() { return _screenLocate.IsScreenLocateManualDoing(); } /// /// 进入手动定位 /// /// 相机画面截图 public Texture2D EnterScreenLocateManual() { return _screenLocate.EnterScreenLocateManual(); } /// /// 退出/完成手动定位 /// /// 定位点(左下、右下、右上、左上) public void QuitScreenLocateManual(List points) { _screenLocate.QuitScreenLocateManual(points); } /// /// 进入自动定位 /// public void EnterScreenLocateManualAuto() { _screenLocate.EnterScreenLocateManualAuto(); } /// /// 修改 Capture ,建议值30 /// public void SetCapture(int value) { _screenLocate.SetCapture(value); } /// /// 修改delay,建议值30 /// public void SetDelay(int value) { _screenLocate.SetDelay(value); } #endregion #region 监听事件 /// /// UVC 相机准备事件 /// public OnUVCIsReadyEvent OnUVCIsReady; public delegate void OnUVCIsReadyEvent(UVCManager.CameraInfo camera); public void InvokeOnUVCIsReady(UVCManager.CameraInfo camera) { try { OnUVCIsReady?.Invoke(camera); } catch (Exception e) { Debug.LogError(e); } } /// /// 单点更新事件 /// public OnPositionUpdateEvent OnPositionUpdate; public delegate void OnPositionUpdateEvent(Vector2 position); public void InvokeOnPositionUpdate(Vector2 position) { try { OnPositionUpdate?.Invoke(position); } catch (Exception e) { Debug.LogError(e); } } /// /// 双点更新事件 /// public OnPositionUpdate2Event OnPositionUpdate2; public delegate void OnPositionUpdate2Event(Vector2 position, int index); public void InvokeOnPositionUpdate2(Vector2 position, int index) { try { OnPositionUpdate2?.Invoke(position, index); } catch (Exception e) { Debug.LogError(e); } } #endregion } }