了解ZXing.Net
想要在unity上实现下载资源的功能,我首先需要确认二维码扫描系统在unity上的可行性。
如果要自行开发一套二维码扫描系统,不仅需要知道二维码生成和解码的原理,而且应该还需要用到一些图形学相关的代码库,如opencv等。如果是在c++或原生安卓上,我觉得这尚有尝试的价值,但现在实在unity上进行开发,从零开始实现相关的功能可能会影响整体进度。
所幸的是通过在网上搜索后,我找到了一个可供unity使用的二维码插件,ZXing.Net,该插件不仅跨平台,而且同时拥有解析二维码和生成二维码的功能,这样等于同时解决了下载资源和上传资源时的二维码问题。
ZXing.Net的主体是一个动态dll库,使用时仅需将其放置在unity工程目录中就行。通过查看示例的项目,我发现在程序中主要要用到ZXing.Net的两个类,分别是BarcodeWriter和Barcode Reader,前者可以将一串字符作为参数生成二维码,后者以图片的颜色数组为参数,解析出图片中二维码的字符串。
示例代码如下:
//解析二维码示例函数
var barcodeReader = new BarcodeReader {AutoRotate = false, TryHarder = false};
//获取图像
Color32[] c = camTexture.GetPixels32();
// 解析图像
var result = barcodeReader.Decode(c, W, H);
if (result != null)
{
LastResult = result.Text;
shouldEncodeNow = true;
url = result.Text;
}
//生成二维码的函数
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);
}