Unityのコルーチン
Unityの便利(?)な機能の一つに「コルーチン」というものがあるそうです。
例えば、オブジェクトがだんだん薄くなってフェードアウトする処理を想定し以下のコードを記述したとします。
void フェードアウト() { for (float f = 1f; f >= 0; f -= 0.1f) { 1/10くらい透明になる処理(); } }
ここで、フェードアウトメソッドを呼び出すと、Unityはすべての処理を1フレームごと行うために
上記forループが1フレーム内で実行されきってしまい、ユーザから見た画面では一瞬で対象のオブジェクトが消えたように見えてしまいます。
この問題、個人的にC++とDxLibで2Dゲームを作っていた時にめっちゃ面倒だった覚えがあるので、
ゲーム作ったことある人ならふむふむという感じかと思います。
ここで、Unityのコルーチンという仕組みを利用したのが以下のコードとなります。
void フェードアウト() { for (float f = 1f; f >= 0; f -= 0.1f) { 1/10くらい透明になる処理(); yield return null; } }
return文にyieldを付与することができます。
すると、この処理はreturn部で一旦(記述通りに)中断しますが、フレームの更新により再度このメソッドにたどり着いた時、yieldで中断した箇所から再開するという仕組みを持つことができます。
この例で言うと、次のフレームはループの2週目の処理を行ってくれるイメージですね。
これによって、エンジニアの想定通り、10フレーム掛けてオブジェクトのアルファを0にするという処理が直感的に実装できるというわけです、
C++とDxLibの頃は、フレームを跨いでループさせるためにグローバルな領域をいかに持つかに傾倒していたので、これは便利そうです。
#C++でも、近いうちにyield returnのコルーチン文法を導入するような動きがあるようですね。(もう実装されてるんでしょうか?)
全然関係ないんですけど、Unity(C#?)はforループの添字にfloatを使うのは一般的なんでしょうか?
Java畑の人間なのですごい違和感です。
ウェアラブルEXPO2016に参加しました
結論
- 「加速度」「ジャイロ」「Bluetooth」「バッテリー」が載ってる「手頃」な端末という意味ではあまりなし。
- いずれにしても大きめのディスプレイが載っているものがほとんどで、激しく動くスポーツには向いていなさそう
- EXPOということで尖った技術があるものがおおい
よさそうなもの
指輪型。
EXPOでは腕輪型の展示もあったがサイトには掲載なし。
ハード開発用の基盤セットもあったのでアイウェア同様作ったほうが早い可能性も。
U-BRAIN 臼田総合研究所株式会社
以下、目についた技術の紹介。
気圧センサー
気圧センサーを展示しているブースが割と多かった印象。
端末の大まかな「高さ」を検出するために利用されており、工場内階段の行き来などによって値が変動、高い場所にいる作業員に注意を喚起するなどの用例が紹介してあった。
精度はそれなりにあるようですが、リアルタイム性は微妙。
伸縮センサー
次によく見かけたのは伸び縮みする技術。
手の甲に伸縮センサーを貼り付けることで、指が曲がっているかどうかを検出することができる。
眼鏡型デバイス
メガネ型デバイス自体は何箇所もあったものの、いずれも高価かつ現在のうちの想定では使う予定がなかったのでしっかりチェックせず。
ただしサン電子株式会社のAceRealという製品の展示ブースでは、アミューズメント施設への展開を明確に画策していた。
www.sun-denshi.co.jp
ソフト開発
ロケーションベース型、画像認識型どちらのARアプリ開発にも使えるSDK集。 wikitude.grapecity.com
アイトラッカー
画面の中央ではなく見てる方向に玉が飛ぶとよい。 www.tobiipro.com
音声認識
呪文を唱えたい。 www.advanced-media.co.jp www.fuetrek.co.jp
VR
手袋を動かすと、VR内の自分の手が動く。