これちのPost-it

技術ネタをペラペラ貼っていくぞ!

Tangoを使って空間に文字を入力できるようにしてみた

今回、Tangoを使って空間に文字を入力し、その場所に文字が表示されるものを作ってみました。
今回作ったものはこちらです。
f:id:korechi:20170623234816j:plain
スマホの画面上のどこかをタップするとキーボードが出現し、文字を入力するとタップした場所に文字が表示されます。
f:id:korechi:20170624000950j:plain
ベッド、クッション、カーテンという文字を空間に入力してみました。別の方向にカメラを向けてカメラを移動させても
f:id:korechi:20170623234759j:plain
こんな風にちゃんと同じ場所に文字が表示されています。
割といろんな用途がありそう?
今回の記事ではその手順を紹介したいと思います。

使うもの

Phab2 Pro
Unity
Tango SDK for Unity←ない人はここからDL

環境セッティング

Tango向けにUnityでアプリがビルドできる方は環境セッティングはスルーして構いません。

前提

Unityがインストール済み
UnityでAndroid用apkがビルドできる(できない人はここを参照)

TangoSDKのインポート

まずTango SDK for UnityをUnityにインポートします。
インポートが終わったら下のような構成になっているはずです。
f:id:korechi:20170623235201p:plain:w300

アプリを作る

プレハブの設置

Assets/TangoPrefabsにある、TangoManager、TangoPointCloud、TangoCameraをhierarchyに配置します。
f:id:korechi:20170623235326p:plain MainCameraは使わないので、非Activeにするか削除しましょう
基本的にこれらのPrefabはInspector上でぽちぽちするくらいで、中のスクリプトは基本いじらないと思います。
これらのプレハブがHierarchyに配置されていないとTangoは動作しませんので注意が必要です。

GameControllerの配置

Hierarchyでcreate -> create EmptyでGameControllerを作成。
Projectビューでcreate -> C# ScriptでGameController.csを作成し、上のGameControllerにアタッチ
GameController.csの中身はこのようになっています。

やってることは大きく2つ。
1つは、タッチされたらスマホのキーボードを開く
2つ目は、キーボードの入力が終わったら入力された文字を表示する
詳細はコードを読んでいただければと思います。

TextMeshを用意

今回はTextを表示させるものとして、一度create EmptyでMemoという空のGameObjectを作り、それにTextMeshというコンポーネントを追加しました。
f:id:korechi:20170624000436p:plain:w300
そしてそれをPrefab化し、ソースコード上でInstantiateしてtextを書き込む、といった形で使用しました。
文字サイズの調整は以下のサイトを参考にしました。
www.clrmemory.com
その際、GameControllerのInspectorのText ObjectにMemoオブジェクトのPrefabを適用させることを忘れないでください。
f:id:korechi:20170624000620p:plain:w300
イメージとしては、

public GameObject 3DText;  // Prefabを持ってきたもの
private GameObject m_text; // PrefabをInstantiateしてできたもの

m_text = Instantiate(3DText, position, Quaternion.identity);
m_text.GetComponent<TextMesh>().text = "hogehoge";

な感じです。これでテキストにhogehogeという文字が表示されます。

完成

あとはビルドして終わりです。
今回は、空間に文字入力してそこに文字を表示させるだけのものを作りましたが、次はアプリが再起動しても同じ場所に文字が見えたりするようにもしてみたいです。