AR playground 〜Unityにチャレンジしてみたの巻〜
1.はじめに
私たち開発チームは、次のフリープロジェクトに向けての調査をしていました。それは、IoTに関するものであったり、ゲームの開発であったり、本業とはまた異なった分野の様々な提案がありました。
最終的には、拡張現実(Augmented Reality)、いわゆるAR技術を試してみようということになりました。
何故、今回ARを選んだのかといいますと、理由は2つあります。
1つは、普段作らないようなソフトウェアを開発してみたかったという思いがあったからです。それは前回のフリープロジェクトも同様でした。もう1つの理由は、AR技術とはどんなものなのか、みんな興味があったからです。
今回はフリープロジェクト第3弾でどのようなことをしたのかお届けしたいと思います。
2.フェーズ1 〜事前準備〜
【調査】
最初に、ARの開発で使用されるツールの調査をしました。ゲーム開発エンジンといえば、Unityが有名なのですが、そのUnityでARの開発(Vuforiaというサービスを使用します)もできるようです。ですので、UnityとVuforia ARサービスを使用することにしました。
【そもそもARとは??】
そもそもARとは何かご存知でしょうか?ARとは、現実世界のオブジェクト(物体)に情報(または仮想のオブジェクト)を重ねることで得られる経験です。これは、カメラを介してリアルタイムで行われ、画面、もしくはヘッドギアディスプレイに表示されます。
ARを使用した有名なスマートフォンアプリといえば、ポケモンGOがあげられます。カメラを介して仮想のオブジェクト(この場合はポケモン)を表示しているのです。
3Dオブジェクトを表示するタイミングは、通常、現実世界のオブジェクトによってトリガーされます。これらのオブジェクトはトリガーと呼ばれます。身近なものだと、ARマーカーといった、QRコードのようなものです。VuforiaのARエンジンは、トリガー(ARデータベースに保存された現実世界のオブジェクトまたは画像)をリアルタイムで照合し、仮想のオブジェクトを現実世界の仮想の位置に表示するのです。
【UnityのインストールとVuforia】
まず、プロジェクトのメインツールであるUnityをインストールすることから始めました。
URL: https://unity3d.com/jp/get-unity/download
ちなみに、今回は使用していませんが、UnityではVR技術もサポートされています。
Unityのインストールは非常に簡単ですが、ダウンロードするバージョンは気をつけなくてはいけません。AR開発(主にVuforia)に対応しているバージョンをダウンロードすることと、(ターゲットである)AndroidおよびiOSに関連するパッケージをインストールすることです。
さらに1つ注意すべき点があります。それは、複数人で開発する場合、パッケージのバージョンは全員同じにしなくてはいけないということです。ここで揃えておかないと、ある人の環境では動作するのにある人の環境では動作しない、といった問題が発生してしまったり、バージョンの管理がとても大変なことになってしまいます。
3.フェーズ2 〜開発を始めるために~
開発に必要なツールを各自のPCにインストールした後、まずはUnityとAR開発に慣れるため、各自で色々試してみました。実際のプロジェクトでは、ARカメラ、トリガー、およびモデルの3つの部分で作成を開始したため、出力のコアは基本的に同じですが、次のようになります。
- ARカメラを配置して、必要なアセットのインポート
- 2Dのトリガー画像をインポートして使用
- ARエンジンがトリガーを認識して表示する3Dモデルをインポート
【Vuforiaでの準備&設定】
Vuforiaを使用してARアプリを作成するには、vuforia engine(URL:https://developer.vuforia.com/)という開発のためのポータルサイトを使用する必要があります。サービスの使用にはアカウントが必要なので、開発用のアカウントを作成しました。
次に、ライセンスキーを作成しました。ライセンスキーを作成する画面では、制限のようなものが表示されますが、テスト開発のようなものであれば特に問題ないかと思うので、今回は気にしないで作成します。
ライセンス管理画面
ライセンス管理画面
ライセンス管理画面
データベース登録画面
「Add Database」というボタンがあるので、そこからデータベースを作成します。TypeはDeviceを選択しました。名前はわかりやすいものにします。日本語は避けましょう。
次に、データベースにTargetを追加します。これが画像です。今回は普通の画像なので、Single Imageを選択し、Fileを選択します。widthはとりあえず1を入力しました。画像によってはうまくアップロードできなかったりするようで、何度かやり直しました。画像の条件等がどこかに明記してあるとありがたいのですが…ファイルサイズが大きすぎるとだめなのかもしれません。
Targetの追加に成功すると、画像の認識ポイントの作成をVuforiaが行ってくれて、認識レベルといったレーティングを行います。星の数が5に近ければ近いほど良い画像です。低い場合は別の画像にしましょう。作成したDatabaseは、Unityの方で使用するのでダウンロードします。作成したライセンスキーとDatabaseをプロジェクト内に追加して、Vuforiaでの準備は完了となります。
【GitHubとのリンク設定】
チーム開発における必須のツールといえばGitです。なので、本プロジェクトでもGitを用いて開発を進めました。Git自体は普段の業務でも使用しているので、インストール等の作業も不要ですし、メンバーは使用方法もわかっています。
順調かと思いましたが、ここで問題が発生します。Unityで作成したプロジェクトは多くがメタファイルであり、どのファイルが必要で、どのファイルが必要でないのか、というのがわかりませんでした。
『.gitignore』も、プロジェクトの生成時には用意されていないので、調べて用意しました。あとは『.gitignore』とにらめっこしながら少しずつプッシュして、別のメンバーの環境で動作するか確認して…の繰り返しでした。
4.フェーズ3 〜Unityで開発作業~
【モデルの追加とトリガー画像の追加】
3Dモデルは、全て自前で用意しようとすると時間がかかってしまうので、無料で使用できるものがあるサイトのもの(URL:https://free3d.com/)を借りました。3DモデリングソフトのBlenderというものを少し触ったりしてみたのですが、操作がかなり難しく、短期間で習得できるものではありませんでした。
ARのトリガーとなる画像は、GitHubに魔法陣生成のサービス(URL:https://github.com/CiaccoDavide/Alchemy-Circles-Generator)を使用し、そこにルーン文字を合わせて開発メンバーで作成しました。
【3Dモデルをランダムに表示する】
特定の画像によって特定の3Dオブジェクト(つまり、1:1の関係)を表示させるということには成功しましたが、せっかくなので、3Dオブジェクトをランダムに表示できないかと考えました。1:3のような、3Dオブジェクトを複数登録して、ランダムに表示できたら面白いのではないかと思ったのです。この処理はUnityのGUIからの操作だけでは足りず、C#のコードを記述する必要がありました。と言っても数行のシンプルなものでしたが。
ここまで作業したプロジェクトには、「Assets/Vuforia/Scripts/DefaultTrackableEventHandler.cs」というファイルがあります。そのファイルの「OnTrackingFound」という処理の中身を少し変更しました。
for (var i = 0; i < rendererComponents.Length; i++) { if (i == renderedElementIndex) { rendererComponents[i].enabled = true; } else { rendererComponents[i].enabled = false; } } |
これでランダムにオブジェクトの表示ができるようになりました。
トリガーが表示されるたびにランダムでオブジェクトが表示されるようになっています。
5.おわりに
普段業務で使用しないツールであり、初めてだらけだったので多くのことでつまずきました。プログラミングのノウハウだけではなく、プロジェクトの進行方向や役割分担もいかに重要なのか、という点も気づかされました。GUIはとても便利ですが、使いこなせるまでが大変ですね…。
ここまで読んでいただきありがとうございました!
6.参考
– [YouTube — How to create an Augmented Reality App](https://www.youtube.com/watch?v=MtiUx_szKbI)
– [Create a Pokémon GO Style Augmented Reality Game With Vuforia](https://code.tutsplus.com/tutorials/creating-ar-games-on-unity-using-vuforia-part-1–cms-27210)