こんにちは、mizogucheです。2015年9月にクラスターに入ったのでもう6年目です。
この記事はクラスター Advent Calendar 2020 - Qiitaの2日目の記事です。
Unity UIでの課題
UnityでUIを実装すると普段使っているネイティブアプリの操作性と違った触り心地になります。
ネイティブアプリで簡単に実装できるUIの操作性をUnityで再現するコストはかなり高く、たとえばiOSにおける戻るジェスチャ、Androidにおけるバックボタンなど、OS固有の操作はネイティブUIだと何も実装しなくても実現できる1一方で、Unityではそれぞれのプラットフォームごとに独自に実装していく必要があります。
感覚的なものでいうと、スクロールビューのスクロールの感触なんかもUnity、iOS、Androidでそれぞれ違うので、Unity製のアプリだと他のネイティブアプリと比較して触り心地がよくないのが正直なところです。
Unityのランタイムの起動に時間がかかる分、アプリの起動時間が遅くなってしまうというのも大きな問題でした。
Unity as a Library
Unityでビルドしたアプリを起動したらすぐにUnityのランタイムが実行されますが、Unity as a Library(= UaaL)という技術で、アプリの一部分だけでUnityを利用することができます。
これによりUnityでの再現が難しいネイティブアプリのUIの操作感を実現しつつ、必要なところでUnityの表現力を発揮することができます。
メンテナンスコストの増加
すべてがUnity製のアプリであれば1つのコードからiOS/Android両プラットフォームのアプリをビルドすることができます。
しかし、UaaLを使うことでiOS/Android両プラットフォームのネイティブUI部分を実装する必要が生まれます。
つまり、UaaLの採用によって実質的に2つのアプリを開発・メンテナンスする必要が生まれます。
clusterではUaaLをどう利用したか
ネイティブUIのoutroom/Unityのinroom
ワールド・イベントに入るまでの世界をoutroom、ワールド・イベントに入った後のUnityの世界をinroomと呼んでいます2。
in-gameとかのもじりなんだけど、in-game人によって解釈ばらつくっていうのと、イベントとかエモいワールドとか別にゲームじゃないけど大事なので疎外するような言葉を使いたくないよねっていう造語、たぶんこの先5年ぐらい使うことになるので言霊の設計は大事
— xyx (@xanxys_) December 1, 2020
モバイルアプリ版clusterで、outroomをネイティブ、inroomでUnityを使うようアップデートしたものが11月にリリースした v1.85です。
これにより、Unity UIでの課題を解決してネイティブの触り心地を実現つつ、ワールド・イベントのクリエイティブな領域ではUnityの表現力を使うことができるようになりました。
この動画をご覧いただくと、普通にネイティブUIで実装し直すだけでどれだけ改善されたかがおわかりいただけるかと思います。
今後
outroomをネイティブUIにして体験を改善することができました。
しかしまだまだ改善することは山積みなため、クラスターではiOS/Androidエンジニアを募集しています。
というわけで2日目の記事は以上です。
明日はかばにゃすさんの経理業務とデータベースの関係性です。 お楽しみに!!
クラスター Advent Calendar 2020 - Qiita