こたつにっき

Unityで遊びつつメモとか書きます

UnityでHoloLens用Twiiterアプリを作った話

こんにちは。今の名前はこTaktです。

 

最近研究室で新しいおもちゃを触っています。

f:id:kotatu99:20170712182902j:plain

そう、巷で話題(?)のHoloLens(ホロレンズ)です。

1台33万円らしいです。震える。

 

作ったもの

Twitterアプリを作ってみました。 

f:id:kotatu99:20170712214450g:plain

 

HoloLensって?

HoloLens何ぞやって人は電脳コイルの「電脳眼鏡」を想像してもらえれば大体あんな感じです。

 

え?

電脳コイルを知らない...?

 

じゃあ見ておいて下さい。最近だとソードアートオンラインの映画版でも似たような技術が出て来てます。そっちでもまあ結構です。

 

画像1枚で説明するとこんな感じです。

f:id:kotatu99:20170712183815j:plain

Microsoft がホログラフィック テクノロジーに命を吹き込む | HoloLens

 

要は眼鏡(ヘッドギアと言った方が適切かも...)を被ると視界にウィンドウやらアプリやら3Dモデルやらが表示され、それを手のジェスチャや音声で操作するブツです。

 

作るもの

僕はTwitterが大好きです。HoloLensを被ったらみんなのツイートがふわ〜〜〜と

浮き上がって見えたらなんか楽しそうじゃないですか?未来ですよね。

というわけで

 

現実世界とリンクしたTwitterタイムライン

 

作っていきます。

導入

まずHoloLens開発はおなじみのUnityでやります。

導入記事は結構多いので楽。でも僕はMacのBootCampで開発したのでエミュレーターが使えないのは少し不便でした。

HoloLens のアプリ開発はじめました - 凹みTips

UnityによるHoloLens開発環境&エミュレータ設定について - Qiita

 

TwitterAPIを叩く

TwitterAPIから現在地周辺のツイートを取得したい。

バッチリそのままのライブラリを開発してる方が居たので借りました。

qiita.com

 

ドキュメント読んで

検索にgeocodeを指定します。これで現在地周辺のツイートを検索できる。

The Search API — Twitter Developers

 

ちなみに現在地についてですが、

僕はてっきりHoloLensにGPSがついてると思ってました...。

無いんですね。というわけでWifiのアクセスポイントから現在地取ることにします。

GoogleMapsGeolocationAPIを使用。仕方ないですが精度は低いです。大体近くの区役所とかになります。

The Google Maps Geolocation API  |  Google Maps Geolocation API  |  Google Developers

クライアントを作る

ここからはいつものUnityプログラミング。

uGUIで取得したTweetをパネルとして表示。 

f:id:kotatu99:20170712195904p:plain

ちょっと見辛いですかね、下に地図の画像を表示して周囲にパネルを浮かばせてます。

視点変えるとこんな感じ。

f:id:kotatu99:20170712214010p:plain

よし!実機ビルドだ実機ビルド!

 

UWPの闇〜OAuth認証

 

どうやらTwitterOAuth認証の部分で引っかかってるらしい。でもエディター上では動く...じゃあ.NETのOAuth部分か...?

と調べていくと原因がコレでした。(気づくのに3日はかかった...)

stackoverflow.com

まずTwitterAPIを使うのにPCで鍵を暗号化しますが(ここら辺よく知らないです勉強します)

 Unityでは暗号化をSystem.Security.Cryptographyの関数でやってます。

using System.Security.Cryptography;

...

HMACSHA1 hmacsha1 = new HMACSHA1(Encoding.ASCII.GetBytes(signatureKey));
byte[] signatureBytes = hmacsha1.ComputeHash(Encoding.ASCII.GetBytes(signatureData));

が、HoloLensやWindowsPhoneで使われてる.NET core 4.5では使えないらしい。

代わりに Windows.Security.Cryptographyでやれとの事。

(´・ω・`)知らんがな

using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Security.Cryptography;
using Windows.Security.Cryptography.Core;
using Windows.Storage.Streams; 

...

var objMacProv = MacAlgorithmProvider.OpenAlgorithm("HMAC_SHA1");
var messageBytes = Encoding.UTF8.GetBytes(signatureData);
var keyBytes = Encoding.UTF8.GetBytes(signatureKey);
CryptographicKey hmacKey = objMacProv.CreateKey(keyBytes.AsBuffer());
IBuffer buffHMAC = CryptographicEngine.Sign(hmacKey, messageBytes.AsBuffer());

 に書き換え。

環境毎に挙動を変えるのはUnityでは

#if UNITY_EDITOR
 //editorでの挙動

#else if UNITY_UWP

 //UWPでの挙動

#end if

 と書きますが、何故かこれがうまくいかない。という事で

Unityで書き出し(UWP部分コメントアウト)

VisualStudioでUWP部分を戻す

書き出し

 

これでやっとビルドできました。

 

疲れた。。。。。。。。。。。。。

Windowsアプリと同じ感じでビルドできるようになればいいんですが。

 

できました

初HoloLensアプリ「atSpot」完成!

f:id:kotatu99:20170712214450g:plain

機能

  • 自分の周囲にある 位置情報付きツイート(I'm at ~)を空間上に表示します
  • 下部に表示される地図と現在位置が連動してます(リアルタイムでは無い)
  • 隠れた人気スポットが見つかるかも?

youtu.be

 

実際に試してみたところ、ラーメン屋率高し。

ランチ検索に良いかもしれません。

f:id:kotatu99:20170712213758j:plain

f:id:kotatu99:20170712213713j:plain

 (テザリングしたら何故か現在地が札幌になった)

横浜だと麻婆豆腐のお店とか出て来ました。腹が減る。

 

後どうでも良いですがTwitterのテレビCMのイメージ映像と似てると思う。

 

f:id:kotatu99:20170712220832j:plain

f:id:kotatu99:20170712220854p:plain

イメージ映像に現実が追いつくのも近いのでは?Twitterは僕にお金くれても良いですよ

まとめ

今後はタップしたらルート検索とか画像出したりとかでしょうか?

やりたいですね。

 

触ってアプリ開発してとHoloLensの感想ですが 、

未来感

がすごい。未来に生きてますわ。

 

HoloLensとアプリ共に研究室のオープンキャンパスで展示して高校生とかに被せてました。皆さん反応が良くて楽しかったです。

ソードアートオンラインのアレじゃないですか!」とか言われました。

大体あってる。

 

これからもアプリ開発はして行きたいですが今のエミュレーターとか動かせない環境だとスピード下がるのでどうにかしたい所。

後はUWPですね…ここら辺はUnity2017で.NETのバージョンが変わるとかなんとからしいのでそこも要チェックかもしれません。

 

ではまた!