• unity之制作二维码扫描


    一、效果图

    二、dll下载 

    要生成二维码需要使用 zxing.unity.dll

    链接:https://pan.baidu.com/s/166klhdbIi3mAesdp4JEn9A?pwd=syq1 
    提取码:syq1

    在unity中创建Plugins文件夹,将dll放入此文件夹中

    我这里使用的unity版本是2019.4.32

    三.创建二维码

    网上有好多关于生成创建二维码效果的案例大家不懂也可以查查其他的,基础代码都差不多,我这里整理了一下,脚本多加了些注释。

    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. using UnityEngine.UI;
    5. using ZXing;
    6. using ZXing.QrCode;
    7. ///
    8. /// 创建二维码
    9. ///
    10. public class CreatQR : MonoBehaviour {
    11. //存放二维码的纹理图片
    12. Texture2D encoded;
    13. [Header("需要生产二维码的字符")]
    14. public string QrCodeStr = "https://www.baidu.com/" ;
    15. [Header("在屏幕上显示二维码 ")]
    16. public RawImage rawImg;
    17. void Start()
    18. {
    19. /*初始化纹理图片
    20. * 注意:宽高度大小必须是256,
    21. * 否则出现索引超出数组边界错误
    22. */
    23. encoded = new Texture2D(256, 256);
    24. CreatQr(); //创建生成二维码
    25. }
    26. #region 生成二维码
    27. ///
    28. /// 创建二维码
    29. ///
    30. public void CreatQr()
    31. {
    32. if (QrCodeStr != string.Empty)
    33. {
    34. //二维码写入图片
    35. var color32 = Encode(QrCodeStr, encoded.width, encoded.height);
    36. encoded.SetPixels32(color32); //更改纹理的像素颜色
    37. encoded.Apply();
    38. //生成的二维码图片附给RawImage
    39. rawImg.texture = encoded;
    40. }
    41. else
    42. Debug.Log("没有生成信息");
    43. }
    44. ///
    45. /// 生成二维码
    46. ///
    47. /// 需要生产二维码的字符串
    48. ///
    49. ///
    50. ///
    51. private static Color32[] Encode(string formatStr, int width, int height)
    52. {
    53. //绘制二维码前进行一些设置
    54. QrCodeEncodingOptions options = new QrCodeEncodingOptions();
    55. //设置字符串转换格式,确保字符串信息保持正确
    56. options.CharacterSet = "UTF-8";
    57. //设置绘制区域的宽度和高度的像素值
    58. options.Width = width;
    59. options.Height = height;
    60. //设置二维码边缘留白宽度(值越大留白宽度大,二维码就减小)
    61. options.Margin = 1;
    62. /*实例化字符串绘制二维码工具
    63. * BarcodeFormat:条形码格式
    64. * Options: 编码格式(支持的编码格式)
    65. */
    66. var barcodeWriter = new BarcodeWriter { Format = BarcodeFormat.QR_CODE, Options = options };
    67. //进行二维码绘制并进行返回图片的颜色数组信息
    68. return barcodeWriter.Write(formatStr);
    69. }
    70. #endregion
    71. }

    场景布局

    创建一个RawImage,给这个物体添加Button组件和新建的CreatQR脚本 

     运行后效果:

    使用浏览器或其他可扫描的软件扫描此二维码可以跳转到百度页面

    四.unity扫描二维码 

    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. using UnityEngine.UI;
    5. using ZXing;
    6. ///
    7. /// 扫描图片
    8. ///
    9. public class ScanQRCode : MonoBehaviour
    10. {
    11. bool isOpen = true; //true当前开启扫描状态 false 当前是关闭扫描状态
    12. Animator ani; //扫描动画
    13. private WebCamTexture m_webCameraTexture;//摄像头实时显示的画面
    14. private BarcodeReader m_barcodeRender; //申请一个读取二维码的变量
    15. [Header("显示摄像头画面的RawImage")]
    16. public RawImage m_cameraTexture;
    17. [Header("扫描间隔")]
    18. public float m_delayTime = 3f;
    19. [Header("开启扫描按钮")]
    20. public Button openScanBtn;
    21. void Start()
    22. {
    23. //调用摄像头并将画面显示在屏幕RawImage上
    24. WebCamDevice[] tDevices = WebCamTexture.devices; //获取所有摄像头
    25. string tDeviceName = tDevices[0].name; //获取第一个摄像头,用第一个摄像头的画面生成图片信息
    26. m_webCameraTexture = new WebCamTexture(tDeviceName, 400, 300);//名字,宽,高
    27. m_cameraTexture.texture = m_webCameraTexture; //赋值图片信息
    28. m_webCameraTexture.Play(); //开始实时显示
    29. m_barcodeRender = new BarcodeReader();
    30. ani = GetComponent();
    31. OpenScanQRCode(); //默认不扫描
    32. //按钮监听
    33. openScanBtn.onClick.AddListener(OpenScanQRCode);
    34. }
    35. #region 扫描二维码
    36. //开启关闭扫描二维码
    37. void OpenScanQRCode()
    38. {
    39. if (isOpen)
    40. {
    41. //开启状态,需要关闭扫描
    42. ani.Play("CloseScan", 0, 0);
    43. //CancelInvoke("CheckQRCode");
    44. }
    45. else
    46. {
    47. //关闭状态,需要开启扫描
    48. //开始扫描
    49. ani.Play("OpenScan", 0, 0);
    50. //以秒为单位调用方法
    51. //InvokeRepeating("CheckQRCode", 0, m_delayTime);
    52. }
    53. isOpen = !isOpen;
    54. }
    55. #endregion
    56. #region 检索二维码方法
    57. ///
    58. /// 检索二维码方法
    59. ///
    60. public void CheckQRCode()
    61. {
    62. //存储摄像头画面信息贴图转换的颜色数组
    63. Color32[] m_colorData = m_webCameraTexture.GetPixels32();
    64. //将画面中的二维码信息检索出来
    65. var tResult = m_barcodeRender.Decode(m_colorData, m_webCameraTexture.width, m_webCameraTexture.height);
    66. if (tResult != null)
    67. {
    68. Application.OpenURL(tResult.Text);
    69. Debug.Log(tResult.Text);
    70. }
    71. }
    72. #endregion
    73. }

    场景布局:

     这里要录制动画,可能比较麻烦,下面有程序包,大家可以下载来看看

    五、程序包下载

    链接:https://pan.baidu.com/s/1EXpW5CUISI6Khk3dQfaeLw?pwd=syq1 
    提取码:syq1

    unity版本是2019.4.32

  • 相关阅读:
    核苷酸序列中的基序发现工具Weeder
    【无标题】
    jdbc——工具类的创建
    【洛谷算法题】P5712-Apples【入门2分支结构】
    Kyligence Cloud 4.6 GA 发布:更简化、更高效的云上分析体验
    【Java基础】集合(2) —— List
    【前端甜点】某视频网站的m4s视频/音频下载方案(20240420)
    matlab|基于DistFlow潮流的配电网故障重构(输入任意线路)
    JVM机制理解与调优方案
    AWVS的简介与安装
  • 原文地址:https://blog.csdn.net/qq_42345116/article/details/125909302