Unity3D下打开摄像头,将摄像头的内容作为Texture2D显示在场景中

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;


struct CameraSetting
{
    public int width;
    public int height;
    public int framerate;
}

public class WebCameraController : MonoBehaviour
{
    static WebCamTexture camTexture;
    public RawImage m_img;
    string deviceKey = "";
    int curId=0;
    int curSettingid = 0;

    List<CameraSetting> settinglist = new List<CameraSetting>();

    // Start is called before the first frame update
    void Start()
    {
        m_img = GetComponent<RawImage>();

        CameraSetting setting = new CameraSetting();
        setting.width = Screen.width;
        setting.height = Screen.height;
        setting.framerate = 60;
        settinglist.Add(setting);

        CameraSetting setting2 = new CameraSetting();
        setting2.width = Screen.width;
        setting2.height = Screen.height;
        setting2.framerate = 30;
        settinglist.Add(setting2);

        CameraSetting setting3 = new CameraSetting();
        setting3.width = Screen.width / 2;
        setting3.height = Screen.height / 2;
        setting3.framerate = 60;
        settinglist.Add(setting3);

        CameraSetting setting4 = new CameraSetting();
        setting4.width = Screen.width / 2;
        setting4.height = Screen.height / 2;
        setting4.framerate = 30;
        settinglist.Add(setting4);

        StartCoroutine(CallCamera());
    }

    string getDeviceNameByKey(string key)
    {
        WebCamDevice[] cameraDevices = WebCamTexture.devices;
        foreach(WebCamDevice device in cameraDevices)
        {
            if(device.name.Contains(key))
            {
                return device.name;
            }
        }
        return "";
    }


    string getDeviceNameById()
    {
        WebCamDevice[] cameraDevices = WebCamTexture.devices;

        if (cameraDevices.Length == 0)
        {
            MessageBox.instance.showMsg("没有找到摄像设备");
        }
        return cameraDevices[curId].name;
    }

    IEnumerator CallCamera()
    {
        yield return  Application.RequestUserAuthorization(UserAuthorization.WebCam);
        if(Application.HasUserAuthorization(UserAuthorization.WebCam))
        {
            if (camTexture != null)
                camTexture.Stop();

            string deviceName = getDeviceNameById();
            if(string.IsNullOrEmpty(deviceName))
            {
                Debug.Log("没有找到logi相机设备");
                yield break;
            }

            camTexture = new WebCamTexture(deviceName, settinglist[curSettingid].width, settinglist[curSettingid].height, settinglist[curSettingid].framerate);

            Debug.Log("Screen Info:" + Screen.width + " : " + Screen.height);

            m_img.canvasRenderer.SetTexture(camTexture);
            camTexture.Play();
        }
    }

    // Update is called once per frame
    void Update()
    {
        // 通过F1键切换相机
        if (Input.GetKeyDown(KeyCode.F1))
        {
            WebCamDevice[] cameraDevices = WebCamTexture.devices;
            curId++;
            if (curId > cameraDevices.Length - 1) curId = 0;
            Debug.Log("当前使用的设备id=" + curId);
            StartCoroutine(CallCamera());
        }

        // 通过F2切换分辨率
        if (Input.GetKeyDown(KeyCode.F2))
        {
            curSettingid++;
            if (curSettingid > 3)
                curSettingid = 0;

            StartCoroutine(CallCamera());
        }
    }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值