Unity を検索

2020.2 ベータ版で Unity セーフモードが利用可能になりました

2020年10月9日 カテゴリ: テクノロジー | 6 分 で読めます
取り上げているトピック
シェア

Is this article helpful for you?

Thank you for your feedback!

Unity 2020.2 ベータ版では Unity セーフモードが利用可能になりました。これにより、スクリプトにコンパイルエラーがあるプロジェクトを開いたときの Unity の挙動が改善されます。

エディター起動時にコンパイルエラーが発生した場合、セーフモードに入るか問い合わせる画面が表示されます。このモードは、コンパイルエラーを解決するための最適な環境を提供するように設計されているため、プロジェクトのすべてのアセットがインポートされるのを待たずに、素早くプロジェクトを動作する状態に戻すことができます。この機能は、プロジェクトを新しい Unity バージョンにアップグレードするプロセスを簡素化およびスピードアップし、また、ライブラリフォルダに誤ったインポートアーティファクトが含まれているケースを減らすことで、大規模なプロジェクトで作業するチームを支援します。

Unity セーフモードが発動する流れ

本番開発で見出された課題

私たちは、皆さんや社内の制作チームからのフィードバックに基づいて、Unity を使う際に受け取る体験を改善させたいと常に考えています。そうした活動の中で、改善すべきとされた領域の 1 つに、プロジェクトをアップグレードした後の最初のスクリプトのコンパイルやアセットのインポート時にエラーが検出、報告された場合の Unity の振る舞いが挙げられていました。

これを受けて、私たちは最近、起動時の Unity の挙動や、起動時に発生するコンパイルエラーをユーザーに報告する方法、また、プロジェクトを含む環境やドメインを立ち上げる最初のプロセスを改善しました。この記事では、Unity 2020.2 でこの分野の問題を解決するために行ったことを共有します。この記事をお読みになった皆さんからのフィードバックをいただければ幸いです。

実際には、多くのプロジェクトでは、後処理やカスタマイズされたスクリプト可能なインポーターのためにスクリプトが存在していたり、プロジェクト内のコードや依存しているパッケージを介して単にプレハブを正しくデシリアライズするためのスクリプトが存在していたりすることに依存しています。スクリプトやパッケージでコンパイルエラーが発生すると、それぞれのアセンブリを読み込むことができず、またコンパイルが完了しないので、そのコードを実行できません。コンパイルが完了した後、以前のバージョンの Unity では、プロジェクトを部分的にロードし、すべてのアセットがインポート済みになるまでインポート作業を続けます。プロジェクトが部分的にロードされている状態が生じることが原因で様々な問題が発生しており、今回のセーフモードの導入は、そうした問題に対処することを目的としています。

Unity セーフモードの導入

Unity 2020.2 では、起動時にコンパイルエラーが発生した場合、Unity は新しく導入されたセーフモードに入るメニューを備えたウィンドウを表示します。セーフモードでは、プロジェクトを管理し、コンパイルエラーを解決し、プロジェクト環境を正しく機能する状態に戻すことができます。

セーフモードでは、Unity は最低限のエディターのユーザーインターフェースを提供し、機能を制限することで、プロジェクトの残りの部分を開く前にコンパイルエラーを解消することに集中できるようにします。このインターフェイスには、以下のものが含まれますが、これに限定されません。

  • スクリプトとアセンブリ定義を管理する機能を備えた Project ビュー
  • コードエディターとの連携
  • パッケージマネージャーウィンドウ
  • コンソール
  • インスペクター
  • プロジェクト設定
  • Unity Collaborate を除く、バージョン管理のサポート(Unity Collaborateを除く

セーフモードでは、プロジェクトやそのパッケージからマネージコードが実行されることはありません。これにより、相当に壊れた状態のプロジェクトを開いた場合でも、セーフモードのエディターは常に完全に機能し、信頼性の高いものとなります。

Unity は、コンパイルエラーがなくなったことを検出すると、自動的にセーフモードを終了します。セーフモードを終了すると、プロジェクトは完全にインポートされ、エディタは通常の完全な機能を回復します。

セーフモードの解決する問題

  • アセットがインポートされるまでエラーが表示されない問題:スクリプト以外のアセットをインポートする前に、Unity はセーフモードに入るようになりました。このため、セーフモードでプロジェクトを開いてコンパイルエラーを修正する場合、プロジェクト全体のインポートを待ってからコンパイルエラーを修正するよりも大幅に時間を節約することができます。プロジェクトを新しいバージョンの Unity にアップグレードすると API が壊れる場合に、この特徴は特に有効に働きます。
  • 誤解を招くようなエラーメッセージ:以前は、Unityのアップグレード後にコンパイルエラーが発生したプロジェクトを開くと、スクリプトが読み込まれていない状態でインポートが開始され、エラーメッセージが表示されていました。しかし、これらのエラーは「本当の」ものではないため(単に、スクリプトがまだロードされていない情報に依存しているだけ)、誤解を招くメッセージとなっています。このため、プロジェクトのアップグレードやトラブルシューティングのワークフローが複雑になったり、遅くなったりすることがわかっていました。コンパイルエラーが修正されると、結果として生じるエラーは発生しなくなります。セーフモードでは、コンパイルエラーが修正されるまでアセットのインポートを保留するため、このようなエラーメッセージが発生することはありません。
  • 破損したアーティファクトのキャッシング:一般的に知られているのは、「マテリアルのプレビューがピンク色になる」(そして「Library フォルダを削除しましたか」と聞かれる)問題です。部分的にロードされたプロジェクトのコンテキストでアセットをインポートすると、Library キャッシュフォルダーに不正なアーティファクトがキャッシュされることがよくあります。アセットの依存関係が正しく宣言されていない場合、Unity はキャッシュされた正しくないアーティファクトからプロジェクトを自動的に復元することができず、その結果、プロジェクトでの作業時に予測できない振る舞いをします。セーフモードを使用することで、破損したアーティファクトがキャッシュされるケースを大幅に減らすことができます。
  • インポート時間の増加:「なぜ Unity はすべてのテクスチャを再インポートするのか」と質問される問題です。アセットインポーターとポストプロセッサーの C#コードでアセットの依存関係が正しく宣言されている場合、部分的にロードされたプロジェクトでは、コンパイルエラーを修正する前に多数のアセットを一度インポートし(本来これは不要です)、コンパイルエラーを修正した後にまた大量のアセットをインポートします。これによって、全体のインポート時間が大幅に増加してしまいます。セーフモードですべてのコンパイルエラーを解決することで、この二重インポートを回避することができます。
  • 不要な再インポート:プロジェクトのスクリプトに対してイテレーションをかけている最中に Unity を再起動すると、現在のバージョンのスクリプトがコンパイルされていない場合、不要な再インポートが発生することがあります。セーフモードを使用するとプロジェクト環境をより早く機能する状態にすることができるため、このようなワークフローにおいて、エディターの再起動後のコードに対するイテレーションのプロセスへの影響を最小限に抑えることができます。
  • 偶発的な破損:シーンやプレハブを正しく保存するために必要なスクリプトがコンパイルエラーのせいで読み込みに失敗したために、ユーザーが意図せずに部分的に読み込まれたプロジェクトで作業してしまい、シーンやプレハブが破損する可能性があります。セーフモードはこれを防ぎ、壊れたスクリプトを含むプロジェクトを開くときには、ユーザーが安全なアクションだけを取れるように制限をかけます。

これらの問題に対処することで、セーフモードはプロジェクトのアップグレードを行うプロセスを大幅に改善し、プロジェクトをロールバックまたはリカバリーする必要が生じるリスクを大幅に低減します。

Unity セーフモードを使用して、Unity プロジェクト内にある Vector3 変数の誤った宣言を修正する

バッチモードへの対応

以前のバージョンでは、バッチモードで Unity を動かしているときでも、コンパイルエラーが発生しているプロジェクトを部分的にロードして、すべてのアセットのインポートを進めていました。インポートが終了すると、デフォルトでは、コマンドライン引数で指示がない限り、エラーメッセージを表示して終了します。この挙動を Unity 2020.2 では変更しました。変更後のバッチモードでは、デフォルトでは、プロジェクトの部分的なロードとアセットのインポートを使用しなくなり、コンパイルエラーが検出されるとすぐにエラーメッセージを表示して終了するようになりました。これにより、コンパイルエラーがある場合でも、バッチモードの完了が大幅に速くなりました。この処置により、継続的インテグレーション(CI) システムがプロジェクトのアセットキャッシュサーバーに誤ったインポートのアーティファクトを格納して、プロジェクトで作業している全員に影響を与える事態の発生を防ぎます。

今すぐ試して、機能の洗練を支援する方法

私たちは、Unity に新しく搭載されたセーフモード状態について、あらゆる側面に関するフィードバックを募集しています。特に、セーフモード中に使う重要だと思われる機能を見逃していないかどうかを知りたいと思っています。ぜひ、フォーラムでフィードバックをご提供ください。

Unity の R&D と QA スタッフは、リリースの安定化、機能の洗練、およびより皆さんを生産的にさせるワークフローの実現を目指して懸命に仕事をしていますが、コミュニティからのフィードバックなしにはこうしたことを実現することは不可能です。

Unity 2020.2 ベータ版について

Unity 2020.2 の開発を通じて、2020 年の重点テーマとしていたパフォーマンス、安定性、ワークフローの改善に引き続き注力しています。ベータ版にご参加いただき、今後のツールについてのご意見をお聞かせください。

2020年10月9日 カテゴリ: テクノロジー | 6 分 で読めます

Is this article helpful for you?

Thank you for your feedback!

取り上げているトピック