こんにちは、Unityエンジニアのオオバです。
まずは今回使用するZxingというライブラリを手に入れます。ちなみにライセンスはApache License 2.0 (Apache)
とのことなので、比較的自由に使えます。
解凍すると様々な環境におけるプラグインファイルが現れます。
ちなみにSystem.Drawing
がUnityに存在しないので、net2.0, net3.5のプラグインでは動きません。以下のようなエラーが出てコンパイルできません。
error CS0234: The type or namespace name
Drawing' does not exist in the namespace
System'. Are you missing `System.Drawing' assembly reference?
Unityではunityというフォルダ内のプラグインファイルを使います。
- zxing.unity.dll
- zxing.unity.pdb
- zxing.unity.xml
この3ファイルをUnityのProject内のPlugins
フォルダにコピーします。
例 : Assets/Plugins/
内
3つのサンプルコードを書きました。
QR Code Creator EditorWindow · GitHub
ファイル名 | 内容 |
---|---|
CreateQRCodeWindow.cs | QRコード生成用Editor拡張 |
QRCodeHelper.cs | QRコード読み取り、生成用ヘルパークラス |
SampleQRReader.cs | QRコード読み取りサンプルソース |
👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!
QRコードの作成
Window
> QR
からQRコード作成用WIndowが表示されます
テキストエリアに内容を入力してSaveボタンを押すとProject内にqr.pngというファイルが出来上がります。
少しハマった所 その1
動的にTexture2Dを生成する場合は、幅を2のべき乗にしないとエラーが出ます。
例えばW200 * H200とかにしてしまうと以下のようなエラーが出ます。
IndexOutOfRangeException: Array index is out of range.
ZXing.Color32Renderer.Render (ZXing.Common.BitMatrix matrix, BarcodeFormat format, System.String content, ZXing.Common.EncodingOptions options)
ZXing.BarcodeWriterGeneric`1[TOutput].Write (System.String contents)
しかしW256 * H200ではエラーは出ません。内部ロジックが分からないので原因は分かりません。
少しハマった所 その2
256以上のサイズだと 正常に画像が作られませんでした。
調査中です。とりあえず256pxで作成します。
1024px * 1024pxで制作すると正しくQRコードが作成されませんでした。
QRコードの読み取り
Unityエディタ、Android環境では問題なく読み取りが行われます。
しかしiOSの場合はビルド後に一手間必要です。
iOS10以降からカメラなどのデバイスへアクセスする際、Info.plistにPrivacy - Camera Usage Description
を追加する必要があります。
Add Row
から追加できます。
追記2017.6.23
コメント欄 しろくろさんからの助言で、わざわざInfo.plistを弄る必要はありませんでした。
しろくろさん、情報ありがとうございます。
PlayerSettings
> Other Settings
にCamera Usage Description
を追加できるようになっておりました。
オオバのUnity最低バージョン5.5.2p2以降で確認できています。もっと前のバージョンから使用できるかもしれませんが未調査です。
余談
WebCamTexture を作成する前に、Application.RequestUserAuthorization を呼び出してください。
UnityEngine.WebCamTexture - Unity スクリプトリファレンス
以下のコードをWebCamTextureを作成する前に実行してほしいという旨がリファレンスには記述がありますが、無くてもiOS、Android実機で動作することを確認しています。
yield return Application.
RequestUserAuthorization (UserAuthorization.WebCam);
【動作の様子】
ライブラリ提供に感謝です。
今回のサンプルコードはコチラです。
この記事が気に入ったらフォローしよう
- Unity5.6.1p4
- macOS 10.12.4
- iOS 10.3.2
- Android 5.0.2