Unity实用功能之创建二维码条形码等(一)

736 阅读3分钟

这是我参与8月更文挑战的第6天,活动详情查看:8月更文挑战

概述

二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式。平时生活中经常会有所应用。已经成为了我们生活中不可或缺的一部分。那么在Unity中又改如何实现呢?让我们一起来看一下。

通过上网查阅资料发现,在Unity中创建二维码有两种方法(目前作者找到的,或许还有别的)

  • 第一种是基于Zxing,依赖ZXing.unity.dll,适用于PC端和Android端,离线可用。
  • 第二种是直接从网页生成然后下载(下一篇文章会有所介绍)

本片文章,主要是介绍下如何使用ZXing创建二维码。

ZXing

ZXing是一个开源的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。ZXing可以实现使用手机的内置的摄像头完成条形码的扫描及解码。官方网站在这里(需要借助工具)。界面如下

image.png

在Unity中的使用

在Unity中使用需要 ZXing.dll文件。将其导入到Unity工程文件中最好是Plugins文件夹中
生成二维码的大概思路就是将要生成子的字符串/网址等信息,通过BarcodeWriter的Write方法生成二维码,返回的数据为Color32[],通过Texture2D的SetPixels32方法将获取到的Color32[]转换成Texture2D图片,最后将Texture2D图片转换成想要的图片格式然后在Unity段显示出来。 1、首先创建二维码生成脚本QRcodeCreate.cs,然后在脚本中引入命名空间

  • using ZXing;
  • using ZXing.QrCode; 2、定义一个字符串,用来生成二维码,生成成功之后扫描就会出现定义好的内容 string url = "https://juejin.cn/user/4143372312773549/";
    3、写生成二维码方法,这里返回的是一个Color32数组
/// <summary>
/// 定义方法生成二维码 
/// </summary>
/// <param name="textForEncoding">需要生产二维码的字符串</param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <returns></returns>       
private static Color32[] Encode(string textForEncoding, int width, int height)
{
    var writer = new BarcodeWriter
    {
        Format = BarcodeFormat.QR_CODE,
        Options = new QrCodeEncodingOptions
        {
            Height = height,
            Width = width
        }
    };
    return writer.Write(textForEncoding);
}

4、通过Color32数组创建Texture2D图片

//二维码写入图片    
var color32 = Encode(QrCodeStr[Nmuber], encoded.width, encoded.height);
Texture2D texture2D;
texture2D.SetPixels32(color32);
texture2D.Apply();

到这里,二维码图片就生成完毕,可以根据各位的需求,将Texture2D图片更改类型显示或保存本地都可以。 最后生成效果为

展示.gif

BarcodeFormat枚举讲解

BarcodeFormat中共有21个,分别代表着不同的二维码类型,上述使用的常用二维码QR_CODE = 2048
image.png

其具体解释请参照此篇文章,讲解的较为详细。文章地址

总结

使用ZXing创建二维码还是非常的方便快捷,可以在PC和Android端使用,并且可以离线使用。主要就是选对BarcodeFormat中共有21个即可,但是要注意的是每种条形码都有自己的字符串格式,如果使用错误的格式可能会出现报错的情况,例如,ITF条形码只有数字,如果在创建二维码时使用的字符串就会报如下错误(我使用的是上述的url)

image.png

写在最后

所有分享的内容均为作者在日常开发过程中使用过的各种小功能点,分享出来也变相的回顾一下,如有写的不好的地方还请多多指教。Demo源码会在之后整理好之后分享给大家。欢迎大家相互学习进步。下一篇文章将介绍使用另一种方法创建二维码。