unity3d如何做二维码

2017-01-16 09:04:05 juan_bo 阅读数 1468
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

在如今信息化发展飞速的世界中,二维码 也越来越火,
大街小巷随处可见 ”扫一扫“,
当然游戏里面加入二维码也不是什么稀罕事了 ,
言归正传,到底如何实现?
那让我们一起看看吧
1.下载ZXing.Net.0.14.0.0,下载地址为http://zxingnet.codeplex.com/
 

2.解压下好的文件。
 

3.打开,然后找到其中的unity文件夹并打开。
 

4.将文件夹内的zxing.unity.dll,放到的工程内即可。
 

5.代码编写。
代码 QR_Code
[C#] 纯文本查看 复制代码
?
 
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using UnityEngine;
using System.Collections;
using ZXing;
using ZXing.QrCode;
 
public class QR_Code: MonoBehaviour
{
public Texture2D encoded;
public string Lastresult;
void Start ()
{
encoded = new Texture2D(256, 256);
Lastresult = "http://www.google.com"; //自己的地址 ,测试用的谷歌
}
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);
}
void Update ()
{
var textForEncoding = Lastresult;
if (textForEncoding != null)
{
var color32 = Encode(textForEncoding, encoded.width, encoded.height);
encoded.SetPixels32(color32);
encoded.Apply();
}
}
void OnGUI()
{
GUI.DrawTexture(new Rect(100, 100,256,256), encoded);
}
}


6.代码写好以后,将脚本挂在一个空物体上、运行、即可生成二维码。
运行效果如下:
 



E~DE61M0N1NC00R8KBJQH30.jpg
2016-01-22 13:38:27 yeluo_vinager 阅读数 6905
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

最近看了关于unity生成二维码的功能,感觉有意思就研究分享一下:

我这里用到GUI和UGUI来实现了一次,代码网上都有,我这里也是借用一下,NGUI其实也是一样,我这里就不弄了。首先下载ZXing.Net.0.12.0.0.zip,下载地址为http://zxingnet.codeplex.com/

然后找到其中的unity文件夹,将文件夹放到Unity的工程内。创建一个Raw Image ,这里介绍一下,应为image不支持Texure2d图片,我这里生成的图片是这个,所以只能用Raw Image。将代码挂在一个物体上(空物体就行),具体代码:

using UnityEngine;
using System.Collections;
using ZXing;//引入库
using ZXing.QrCode;
using UnityEngine.UI;

public class BarcodeCam : MonoBehaviour
{
    //定义Texture2D对象和用于对应网站的字符串
    public Texture2D encoded;
    public string Lastresult;
    //定义一个UI,来接收图片
    public RawImage ima;
    void Start()
    {
        encoded = new Texture2D(256, 256);
        Lastresult = "http://www.qq.com";
    }

    //定义方法生成二维码
    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);
    }


    void Update()
    {
        var textForEncoding = Lastresult;
        if (textForEncoding != null)
        {
            //二维码写入图片
            var color32 = Encode(textForEncoding, encoded.width, encoded.height);
            encoded.SetPixels32(color32);
            encoded.Apply();
            //生成的二维码图片附给RawImage
            ima.texture = encoded;
        }
    }

    //将图片画出来
    void OnGUI()
    {
        GUI.DrawTexture(new Rect(100, 100, 256, 256), encoded);
    }


    
}
这样就可以了



2019-05-06 23:54:05 qq_35037137 阅读数 760
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

Unity扫描识别二维码

用WebCamTexture 获得摄像头数据,并把他付给UI层的RawImage.这个用来展示摄像头拍摄的内容画面。

private void CreateWebcamTex(string deviceName)
{
    mWebCamTexture = new WebCamTexture(deviceName,1280, 720);
    rawImage.texture = mWebCamTexture;
    mWebCamTexture.Play();
}

上面的函数需要传入 摄像头的名称,因为手机可能有前后置两个摄像头,需要选择后置摄像头的名称

WebCamDevice[] devices = WebCamTexture.devices; 
foreach (var item in devices){
     if(!item.isFrontFacing)
     {
           CreateWebcamTex(item.name);
           break;
    }   
}

zxing解析摄像头texture内容

    private BarcodeReader mReader;
    public string Decode(Color32[] colors, int width, int height)
    {
            var result = mReader.Decode(colors, width, height);
            if (result != null)
            {
                return result.Text;
            }
            return null;
    }

没必要每帧都去识别,可以每间隔0.2秒识别一次

    private IEnumerator Scan()
    {
            yield return new WaitForSeconds(0.2F);
            yield return new WaitForEndOfFrame();
            if (mWebCamTexture != null && mWebCamTexture.width > 100)
            {
                    string result = Decode(mWebCamTexture.GetPixels32(), mWebCamTexture.width, mWebCamTexture.height);
                    if(!string.IsNullOrEmpty(result)){
                            mWebCamTexture.Stop();
                            //识别成功后做相应操作
                    }else{
                        StartCoroutine(Scan());
                    }
            }

    }

生成二维码

对字符传进行二维码生成,返回的是Color32的数组

    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,
                Margin = 2,
                PureBarcode = true
            }
        };
        return writer.Write(textForEncoding);
    }

将上面获得的Color32数组,设置到创建的Texture中,然后便可以在UI上显示出二维码图片了

Texture2D encoded = new Texture2D(200,200,TextureFormat.RGBA32,false);
var colors  = Encode("这里是二维码的内容",200,200);
encoded.SetPixels32(colors);
encoded.Apply();

更多unity2018的功能介绍请到paws3d爪爪学院查找。链接https://www.paws3d.com/learn/,也可以加入unity学习讨论群935714213

近期更有资深开发人士直播分享unity开发经验,详情请进入官网或加入QQ群了解

2017-04-20 14:25:05 qq_36458268 阅读数 7590
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

最近项目有用到二维码,所以花了半天时间研究了一下,特此分享。

 

第一部分、

 

二维码的生成

1.下载工具

ZXing.Net.0.14.0.0.zip 二维码生成库,链接:https://pan.baidu.com/s/1TTY86APBBs7ptOGOV2OejA  密码: 7vh8 (2018.6.29更新)

解压,把unity文件下的三个文件放到自己的工程Plugins文件夹下

 

2.新建脚本QRcodeDraw.cs

 

 

using UnityEngine;
using System.Collections;
using ZXing;
using ZXing.QrCode;
using UnityEngine.UI;

public class QRcodeDraw : MonoBehaviour
{
    public Texture2D encoded;
    //指定字符串
    public string QRCodes="www.csdn.net";
    public RawImage QRImage;

    void Start()
    {
        ShowCode ();
    }


    //定义方法生成二维码
    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);
    }



    public void ShowCode()
    {
        encoded = new Texture2D(256, 256);
        var textForEncoding = QRCodes;
        if (textForEncoding != null)
        {
            //二维码写入图片
            var color32 = Encode(textForEncoding, encoded.width, encoded.height);
            encoded.SetPixels32(color32);
            encoded.Apply();
            //重新赋值一张图,计算大小,避免白色边框过大
            Texture2D encoded1;
            encoded1 = new Texture2D(190, 190);//创建目标图片大小
            encoded1.SetPixels(encoded.GetPixels(32, 32, 190, 190));
            encoded1.Apply();
            QRImage.texture = encoded1;
        }
    }
        
//    void OnGUI()
//    {
//        GUI.DrawTexture(new Rect(100, 100, 256, 256), encoded1);
//    }

}

 

 

 

第二部分、

 

二维码识别

1.下载Easy Code Scanner.unitypackage,链接: https://pan.baidu.com/s/1kUGqOon 密码: cjr4

 

2.把下载的包拖入工程中,找到EasyCodeScanner的scene的文件,Main Camera上面挂在的EasyCodeScannerExample就是识别二维码的代码,dataStr字符串为识别二维码后的信息

 

 

 

注:

最近有个项目又用到了这两项技术,有个很合适的插件,分享一下(2018.11.26)

链接:https://pan.baidu.com/s/15E9vMFrb545mY818VVCk2Q

 

版权声明:
本教程仅供学习研究参考,不得进行任何商业用途,否则产生的一切后果将由使用者本人承担!教程作者不对任何资源负法律责任,所有资源请在下载后24小时内删除。如果你觉得满意,请购买正版软件资源!!!

 


 

2016-07-09 18:25:01 u010019717 阅读数 5216
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

孙广东   2016.7.9


http://blog.csdn.net/u010019717

扫描二维码  需要类库   zxing.unity.dll 


http://zxingnet.codeplex.com/    Unity可以使用!


普通的  Unity 不会用到扫描二维码的功能,   但是在 AR 产品上有应用了!!!!


        参考这个AR产品 https://detail.tmall.com/item.htm?spm=a220m.1000858.1000725.1.a7gnRz&id=529056403159&areaId=110100&cat_id=2&rn=22493d7ebf3a196f610ce18fa2504dc0&user_id=2090287044&is_b=1


计算机生成了可选文字:
¥ 如 何 使 用 ¥ 
扫 描 二 维 码 
000200 
AR 
口 袋 动 物 园 2AR 
激 活 卡 
扫 描 
天 气 控 制 台 
背 面 的 二 维 码 
3 
开 始 体 验 
体 验 神 奇 的 
口 袋 动 物 园 2


           购买完内容(AR需要识别的图案卡片 激活卡)  要使用通过下载APP扫描(手机,平板都行)  激活卡的二维码, 设备(安装APP的手机或者平板)才能被解锁!


                APP升级不用重新扫描激活卡,说明是激活的设备不是APP.


http://blog.csdn.net/u010019717

using System.Threading;
using UnityEngine.UI;
using UnityEngine;
using System.Collections;
using ZXing;
using ZXing.QrCode;

public class BarcodeCam : MonoBehaviour
{
	public Texture2D encoded;
	public RawImage camsx;       // UI上用于显示摄像头显示的内容
	public Text Rstext;          // ZXing解析的 结果
	//private string TESTstr;    // 网络返回的验证数据结果
	private int sw, sh;
	public static string driverID;   // 设备唯一标识

    // 代表着摄像机
	private WebCamTexture camTexture;
	private Thread qrThread;

	private Color32[] c;
	private int cw, ch;
	private Rect screenRect;
	private bool isQuit;

	public string LastResult;
	private string QRscan;
	private bool shouldEncodeNow;

	void OnGUI()
	{

		GUI.Label(screenRect, driverID);

	}

	void OnEnable()
	{
        // 开启相机
		if (camTexture != null)
		{
			camTexture.Play();
			cw = camTexture.width;
			ch = camTexture.height;
		}
	}

	void OnDisable()
	{
        // 暂停 相机
		if (camTexture != null)
		{
			camTexture.Pause();
		}
	}

	void OnDestroy()
	{
		qrThread.Abort();
		camTexture.Stop();
	}
	void OnApplicationQuit()
	{
		isQuit = true;
	}

	void Start()
	{
        // 设备唯一  ID
		driverID = SystemInfo.deviceUniqueIdentifier;
		encoded = new Texture2D(256, 256);
		LastResult = "www.baidu.com";
		shouldEncodeNow = false;
		screenRect = new Rect(0, 0, Screen.width, Screen.height);
		camTexture = new WebCamTexture();
		if (Screen.width < 1280)
		{
			sw = 640;
		}
		else
		{
			sw = 1280;
		}

        // 在 Unity界面上显示  扫描的内容
		camTexture.requestedHeight = 720;
		camTexture.requestedWidth = sw;
		camsx.texture = camTexture;
		camsx.material.mainTexture = camTexture;
		OnEnable();

		qrThread = new Thread(DecodeQR);
		qrThread.Start();

	}

	void Update()
	{
        // 获取扫描的内容
		if ((c == null) && (camTexture.isPlaying))
		{
			c = camTexture.GetPixels32();
			cw = camTexture.width;
			ch = camTexture.height;
		}

		Rstext.text = LastResult;

		camsx.enabled = false;

		camsx.enabled = true;

		var textForEncoding = LastResult;
		if (shouldEncodeNow &&
			textForEncoding != null)
		{
			var color32 = Encode(textForEncoding, encoded.width, encoded.height);
			encoded.SetPixels32(color32);
			encoded.Apply();
			shouldEncodeNow = false;
			if (QRscan != LastResult)
			{
				QRscan = LastResult;

                // todo 如果遇到新的 二维码那么就执行 其他的操作(网络请求验证啊等等)
				//StartCoroutine(CheckCode(LastResult));
			}
		}
	}

    // 解码 扫描的内容
	void DecodeQR()
	{
		var barcodeReader = new BarcodeReader { AutoRotate = false, TryHarder = false };

		while (true)
		{
			if (isQuit)
				break;

			try
			{

				if (c != null)
				{
					var result = barcodeReader.Decode(c, cw, ch);
					if (result != null)
					{
						LastResult = result.Text;
						shouldEncodeNow = true;
					}

					Thread.Sleep(200);
					c = null;
				}
			}
			catch
			{
			}
		}
	}

	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);
	}
}



Unity3d创建二维码

阅读数 1350