Unityのバージョンをなるべく最新にする試み


こんにちは。エンジニアの鈴木聡です。

現在開発中のプロジェクトでは、Unityの新機能をできるだけ使えるようにしています。そのためには、Unityのバージョンを最新のものにしていくことが重要です。

今回は、実際に使用を始めている機能や、苦労した点について書こうと思います。

新しい機能のプロジェクトでの使用

現在、プロジェクトにおいて、以下の新しい機能が使用されております。

Timeline(2017.1.0から)は演出の一部で使用が開始されていて、そのままリリースに取り込まれる方向で開発が進められています。

TestRunnerのPlayMode(5.6.0から)についても、EditModeと共にCIの流れに組み込まれており、全てのPullRequestに対してテストが走るようになっています。

最新を追い求めるが故の不具合との向き合い

Unity2017.3.0f3にバージョンアップを行なった際に、以下のような不具合が発生して、苦労することになりました。

  1. iOSでアプリを動作させると高確率でアプリがクラッシュしてしまう
  2. UnityUI(uGUI)でApplyした時にレイアウトが崩れてしまう
  3. TestRunnerが実行時に硬直を起こすようになった

これらについては、プロジェクト側での対応では難しいものについては、パッチリリースを待つことになります。

上記不具合については、Unity2017.3.1p1において1および2が解決された模様です。Unity開発チームの迅速な対応に感謝です。

(その後、RectTransformをスクリプトで更新した時の挙動が少し変わっていて少し苦労するのですが、それはまた別の話)

最新を追い求めるが故のAPI置き換えとの戦い

Unityのバージョンをアップデートすると、新しいAPIへの差し替えを促進するために、古いAPIにObsolete属性が置かれることがあります。

完全に古いAPIが消されるまでは、ある程度の時間的猶予があることが多いですが、それでも古いAPIを新しいものに置き換えていく作業もそれなりの手間がかかります。

プロジェクト内で使用しているAPIについては、その都度対応するという方向で問題ないのですが、外部アセットを使用している場合は、そのアップデートを待って忘れずに更新を入れる必要があります。

さらに、外部アセットがサポート終了になっている場合は、アセットの更新が行われませんので、プロジェクト内でアセットを解読してパッチを当てていくことになります。地道な戦いが続きます。

リリース後のアップデートはどうするのか?

リリース後のアプリについては、アプリの安定性がとても重要になります。アプリのクラッシュなどは確実に避けなければなりません。

バージョンアップについては、アプリ全体の動作について、品質保証チームの助力を仰ぐなど、十分な動作確認を行う必要があるでしょう。

最後に

Unityのバージョンを最新に保っていくことには、それなりの苦労が発生するとは思いますが、最新の機能が使えるようになるというメリットは大きいと思います。これからも可能な限り新バージョンを追い求めていければと思います。