打包安卓遇到的问题&测试二维码生成功能
打包安卓
在上一篇报告中我成功地做出了一个简单的二维码识别项目,于是我便尝试将其打包为安卓格式。安卓文件确实顺利地打包出来了,程序也可以运行,但出现了一个意想不到的问题——画面逆时针旋转了90度!
我尝试修改了一下打包设置,如果将应用设定为横屏似乎就不会有这个问题,但是我们的应用在设计上应当是竖屏使用的,所以不能固定其方向。所以我决定换一个思路。
首先,我再屏幕组件上加了一个图片组件,并将其长宽设为一致,同时,我将这个图片的渲染角度设为-90度,这样便手动将图像转正了。
接着,我再代码中新声明了一个图像变量,将场景中的图片组件赋值给此变量后,我在代码中将原来在OnGUI()中绘制的相机图像给了这个图像变量,这样相机画面便可以显示在图像组件上了。
void Update () {
if (c == null)
{
c = camTexture.GetPixels32();
}
//原位于OnGUI中的绘制函数被移动到此处
img.canvasRenderer.SetTexture(camTexture);
testText.text = url;
}
运行结果
测试二维码生成功能
在第一周的报告里,我已经提到过ZXing.Net中的二维码编码功能,这周,我准备对其进行测试,具体步骤如下:
1.新建一个地图,加入canvas组件和图片组件
2.新建一个C#脚本,脚本内容如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using ZXing;
using ZXing.QrCode;
public class QRCodeGenerator : MonoBehaviour {
public Image img;
Texture2D encoded;
// Use this for initialization
void Start () {
encoded = new Texture2D(256, 256);
Color32[] color32 = Encode("www.baidu.com", encoded.width, encoded.height);
encoded.SetPixels32(color32);
encoded.Apply();
}
// Update is called once per frame
void Update () {
img.canvasRenderer.SetTexture(encoded);
}
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);
}
}
该脚本的Encode函数便是之前提到的生成二维码函数,以字符串和图像长,宽为参数,返回一个颜色矩阵。然后,在Start()函数下调用该函数,这次我给的网址(字符串)是百度主页,把返回的颜色矩阵输入到一个Texture2D对象中,再将此对象赋值给地图中的图片组件中。
运行结果:
使用之前的识别软件做一下测试:
最下方显示出了解析的文字“www.baidu.com”。