AR UnityProject改善なう
Tatsuya Shimada(@usagani)
誰?
Tatsuya Shimada(@usagani or @usaganikki)
リクルート住まいカンパニーからきました
- AR/VRおじさん
- 最近Unityエンジニア(非ゲーム)
- Androidエンジニア
- なんかいろいろ
うさがにっき
http://tiro105.hateblo.jp/
VRといえば!
Unity
- 元々はゲーム開発IDE
- 3D Objectを扱うのが非常に簡単
- 最近では非ゲーム分野(AR/VR)での利用も活発に
https://www.thoughtworks.com/radar/platforms/unity-beyond-gaming
Tango
- 既存のAndroidの仕組みだけでは難しかったAR体験を実現してくれる端末
- Tango機能
- MotionTracking
Tango端末自身がどのように動いているか正確に Track
- DepthPerception
奥行きセンサーにより対象までの距離を正確に計測
- AreaLearning
今見ているものを3D scanして記憶することができる
よくあるマーカー(QRコード)ARが3Dのマーカーが使えると思ってもらえれば
今日何を話すか?
Tango Appをリリースしたものの、突貫工事すぎて手がつけられない
もうだめだ、リリースが僕らのゴールだったんだ・・・
LTドリヴン改善!!!
改善方針
- 問題点整理
- ゴール設定
- 具体的にやること設定
- 効果と工数考えて優先順位設定
問題点整理
- Unity独特の文化やツールの選定で苦しんだ
- コードが密結合すぎて修正範囲が見切れないことが多かった
- 動作確認時、意図しない場所が壊れたりして動作確認時のストレスがすごい
Hierarchy View
Project View
Inspector View
Scene View
Unity各要素説明
- Scene View
画面(Activity)内のGameObjectがどの位置に表示されているか表す
- Hierarchy View
画面(Activity)内にGameObjectがどんな階層でおかれているか表す
- Project View
Project全体で使える部品
- Inspector View
画面内のGameObjectの詳細情報、クリックイベントなどを設定できたりする
苦しんだこと
- Inspector Viewで設定したはずの値やイベントが反映されていないことがあった
- コード管理にUnityから提供されているCollaborate(β版)を使った、まだ実用レ
ベルじゃなかった
- テストのアプリの配布にCloudBuildというUnityから提供されているシステムを使
おうとしたが、手元での実行結果とCloudBuildでの実行結果が違った
圧倒的Unity力不足!!
改善ゴール
- 動作確認にかかるコスト削減
- アプリ改善、修正時余計な箇所が壊れないようにする
- もっと適切なツールを探して楽をする
具体策
1. 開発ツール再選定
2. コード規約策定
3. コードレビュー体制確立
4. 設定方針決定、反映
5. 単体テストコード
6. 結合テストコード
7. CI環境作成
いまここらへん!!
開発ツール再選定
- Unity 5.6f
- git(bitBucket)、必要に応じてSouceTree
- Visual Studio Code
- Trello
- confluence(社内), qiita(社外)
コード規約策定
- 基本的にMicrosoftのC#コーディング規約に従う
https://docs.microsoft.com/ja-jp/dotnet/articles/csharp/programming-gui
de/inside-a-program/coding-conventions
- varの利用方法
- 削除の必要のないイベントはラムダ式をつかう
レビュー体制確立
どこまでレビューで保証するかを決める
- Script
- 設計、ロジック、修正範囲が適切か確認
- Inspector View
- アタッチオブジェクトが適切か確認
オブジェクトが抜け落ちてしまう問題は UnityEditorというUnityの機能拡張で回避
- Scene View, Hierarchy View
- 不要なものがないか確認
設計方針
- MVPモデルを採用
- Unityにおける前例も多く、ドキュメントが豊富
- 慣れ親しんだRxであるUniRxライブラリの導入も容易になる
http://yutakaseda3216.hatenablog.com/entry/2017/02/22/151204
単体テスト
Unityに組み込まれているTestRunner > EditorModeをつかう
- Unity上での実行が可能
- もちろんCIでの実行も可能
- ビルドしなくても実行可能
- ライフサイクルに影響を与えるようなテストができない
- 実機でテストができない(Android固有機能についてのテストができない)
- 非同期処理のテストができない
結合テスト
Unityに組み込まれているTestRunner > PlayMode(Unity5.6~)をつかう
- Unity上での実行が可能
- もちろんCIでの実行も可能
- ライフサイクルに影響が与えるテストができる
- 実機でテストができる
- ビルドが必要
-
CI環境
- Jenkinsを使い、ビルド、静的コード解析、テストを行う
- Unityビルド用のプラグイン(unity3dBuilder)があるので比較的ビルドは簡単
-
- iOS対応時にはipa作成に時間がかかるのでipa作成もここでやる、(apkはunity
が出力してくれる)
今後
- MVPにそってTDDでコードリファクタリング中
- だいぶ可読性が上がった気がする
- テストコードはだいたいjUnitと書き方が変わらないので書くのは簡単
- 適切な設計と戦略が重要
今後
- Unite2017TokyoでUnity 2017.2でTangoのnativeサポートが発表された、現在
より開発は楽になる
- ARアプリに使われているAR SDKのVuforiaのnativeサポートも発表された
ARアプリはさらに作りやすくなるはず!!!
最後に
- Androidほど開発手法の議論はされていない印象
- 昨日行われたUnite2017TokyoでもUnity5.x系の命題の一つが効率的な開発と
いわれていた
- 今回利用に至らなかったCloudBuild, Collaborate、Github for unityなど便利な
ツールは次々と開発が進んでいる
-
- 健全なプロジェクト運営はAndroidもUnityも重要な点は変わらないことがよくわ
かった、Androidのテスト、設計方針はUnityにそのまま活かせる!みんなUnity
やろう!
各種情報
Tango
https://developers.google.com/tango/developer-overview?hl=ja
Tango developers(Google plus)
https://plus.google.com/communities/114537896428695886568
Unity forum
https://forum.unity3d.com/
かなり優しく教えてくれます!!

Ar unity project改善