本教程基于Zxing,依赖Zxing.unity.dll,适用于PC端和Android端,离线可用。 Unity版本:2018.4.23f Zxing:GitHub下载 Unity Demo下载:点我下载
成品如下:
二维码扫描:1.新建画布 2.创建一个RawImage 3.创建一个Button 4.创建一个Text 脚本如下:每一句都有注释
using UnityEngine;using UnityEngine.UI;using ZXing;///扫描二维码()=》识别二维码信息public class QRCodeScanning : MonoBehaviour{ BarcodeReader BarcodeReader;//库文件的对象(二维码信息保存的位置) private bool isScanning = false;//扫描开关 private float interval = 3;//扫描识别时间间隔 private WebCamTexture WebCamTexture;//摄像机映射纹理 private Color32[] data;//让信息以像素点的形式 按照数据存放 public Button Sacnning;//扫描Button public RawImage CameraTexture;//摄像机映射显示区域 public Text text;//用来显示扫描的信息 private void Start() { Sacnning.onClick.AddListener(SacnningButton); } private void Update() { if (isScanning)//每三秒扫描一次 { interval += Time.deltaTime; if (interval >= 3) { interval = 0; SacnQRCode();//开始扫描 } } } /// /// 识别二维码信息 /// void SacnQRCode() { data = WebCamTexture.GetPixels32();//获取摄像机中的像素点数组的信息 Result result = BarcodeReader.Decode(data, WebCamTexture.width, WebCamTexture.height);//获取二维码上的信息 if (result != null)//判断是否有信息 有则识别成功 { text.text = result.Text;//显示 二维码上的信息 isScanning = false;//关闭识别 WebCamTexture.Stop();//停止识别 Sacnning.onClick.AddListener(SacnningButton); } } /// /// Sacnning按钮 /// void SacnningButton() { Sacnning.onClick.RemoveListener(SacnningButton); DeviceInit();//开始摄像机 isScanning = true;//打开扫描开关 text.text = null;//清空文本 }/// /// 开启摄像机 前期准备工作 /// void DeviceInit() { WebCamDevice[] devices = WebCamTexture.devices;//获取所有摄像机的硬件 比如前置 后置 WebCamTexture = new WebCamTexture(devices[0].name, 300, 300);//创建一个摄像机显示的区域 (device[0]一般是后置摄像头,400,300为大小) CameraTexture.texture = WebCamTexture;//显示图片信息 WebCamTexture.Play();//打开摄像机进行识别 BarcodeReader = new BarcodeReader();//实例化二维码信息,并存储对象 }} 二维码生成1.新建画布 2.创建一个RawImage 3.创建一个Button 4.PC端测试的话需要准备一个摄像头 脚本如下:每一句都有注释
using UnityEngine;using UnityEngine.UI;using ZXing;//生成二维码public class QRCodeDrawing : MonoBehaviour{ public RawImage QRCode;//绘制好的二维码 public Button DrawButton;//生成按钮 public string QRCodeText = null;//二维码内容,自己填 BarcodeWriter BarcodeWriter;//二维码绘制类 private void Start() { DrawButton.onClick.AddListener(() => DrowQRCode(QRCodeText)); } /// /// 将制定字符串信息转换成二维码图片信息 /// /// 要产生二维码的字符串信息 /// 二维码的宽度 /// 二维码的高度 /// Color32[] GeneQRCode(string formatStr, int width, int height) { ZXing.QrCode.QrCodeEncodingOptions options = new ZXing.QrCode.QrCodeEncodingOptions();//绘制二维码之前 进行设置 options.CharacterSet = "UTF-8";//设置字符编码,确保字符串信息保持正确 options.Width = width;//设置二维码宽 options.Height = height;//设置二维码高 options.Margin = 1;//设置二维码留白 (值越大,留白越大,二维码越小) BarcodeWriter = new BarcodeWriter { Format = BarcodeFormat.QR_CODE, Options = options };//实例化字符串绘制二维码工具 return BarcodeWriter.Write(formatStr); } /// /// 根据二维码图片信息绘制制定字符串信息的二维码到指定区域 /// /// 字符串信息 /// 二维码的宽度 /// 二维码的高度 /// Texture2D ShowQRCode(string str, int width, int height) { Texture2D texture = new Texture2D(width, height); Color32[] colors = GeneQRCode(str, width, height); texture.SetPixels32(colors); texture.Apply(); return texture; } /// /// 绘制二维码 /// /// 二维码信息 void DrowQRCode(string formatStr) { Texture2D texture = ShowQRCode(formatStr, 256, 256);//注意:这个宽高度大小256不要变。不然生成的信息不正确 //256有可能是这个ZXingNet插件指定大小的绘制像素点数值 QRCode.texture = texture;//显示到UI界面的图片上 }}提示:需要在QRCodeText出手动填写二维码内容!!!! 非常简单,不懂留言咨询!
如果有用→欢迎三连♪(・ω・)ノ