这是我参与8月更文挑战的第6天,活动详情查看:8月更文挑战
概述
二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式。平时生活中经常会有所应用。已经成为了我们生活中不可或缺的一部分。那么在Unity中又改如何实现呢?让我们一起来看一下。
通过上网查阅资料发现,在Unity中创建二维码有两种方法(目前作者找到的,或许还有别的)
- 第一种是基于Zxing,依赖ZXing.unity.dll,适用于PC端和Android端,离线可用。
- 第二种是直接从网页生成然后下载(下一篇文章会有所介绍)
本片文章,主要是介绍下如何使用ZXing创建二维码。
ZXing
ZXing是一个开源的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。ZXing可以实现使用手机的内置的摄像头完成条形码的扫描及解码。官方网站在这里(需要借助工具)。界面如下
在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图片更改类型显示或保存本地都可以。 最后生成效果为
BarcodeFormat枚举讲解
BarcodeFormat中共有21个,分别代表着不同的二维码类型,上述使用的常用二维码QR_CODE = 2048。
其具体解释请参照此篇文章,讲解的较为详细。文章地址
总结
使用ZXing创建二维码还是非常的方便快捷,可以在PC和Android端使用,并且可以离线使用。主要就是选对BarcodeFormat中共有21个即可,但是要注意的是每种条形码都有自己的字符串格式,如果使用错误的格式可能会出现报错的情况,例如,ITF条形码只有数字,如果在创建二维码时使用的字符串就会报如下错误(我使用的是上述的url)
写在最后
所有分享的内容均为作者在日常开发过程中使用过的各种小功能点,分享出来也变相的回顾一下,如有写的不好的地方还请多多指教。Demo源码会在之后整理好之后分享给大家。欢迎大家相互学习进步。下一篇文章将介绍使用另一种方法创建二维码。