Version: 2023.1
言語: 日本語
スマートマージ
コマンドライン引数

セーフモード

概要

Unity のセーフモードは、スクリプトのコンパイルエラーがあるプロジェクトを開いたときに、Unity エディターが使用するモードです。セーフモードは、コンパイルエラーを解決するための最適な環境を提供するように設計されており、プロジェクトを素早く機能的な状態に戻すことができます。

セーフモードでは、エディターのユーザーインターフェースは機能が制限された最小限のバージョンになります。また、スクリプト関連のアセットのみをインポートし、スクリプト以外のアセット (モデル、マテリアル、テクスチャ、プレハブなど) のインポートはできません。これは、セーフモードがコンテンツ制作のためのものではなく、コンパイルエラーを解決するためだけのものだからです。

セーフモードでは、プロジェクトやそのパッケージからマネージドコードが実行されることはありません。つまり、Editor スクリプトAssetPostprocessorScriptedImporter のような独自のスクリプトは実行されません。また、セーフモードでは、アセンブリのオーバーライドBurstRoslyn アナライザーも無効になります。これにより、セーフモードのエディターは、ひどく壊れた状態のプロジェクトを開いた場合でも、常に完全な機能と信頼性を保つことができます。

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

コンパイルエラーのよくある原因

一般的にコンパイルエラーが発生するのは、以下のような場合です。

  • プロジェクトを古いバージョンの Unity から新しいバージョンにアップグレードするとき。
  • プロジェクトを、作成時とは異なるバージョンの Unity で開くとき。
  • パッケージ がない、またはバージョンが正しくないパッケージでプロジェクトを開くとき。
  • 独自のスクリプトにエラーがあるプロジェクトを開くとき。
  • バージョン管理 の下でプロジェクトを開くときに、バージョン管理の最新の変更にコンパイルエラーが含まれているとき。

コンパイルエラーが発生したプロジェクトをセーフモードなしで開くと、さまざまな問題が発生します。例えば、プロジェクト内の パッケージ が正しくロードされず、機能しない場合があります。また、アセットが正しくインポートされず、ライブラリキャッシュサーバー に正しくキャッシュされない場合があります。

このような状況では、通常、エラーを解決するまでプロジェクトの残りの部分をインポートしたくありません。セーフモードのツールを使って、このようなスクリプト関連の問題を自分で解決したり、バージョン管理機能を使ってプロジェクトを新しいバージョンに更新し、プロジェクトのすべてをインポートをすることを待たずにエラーを解決できます。

セーフモードへの移行

コンパイルエラーが発生しているプロジェクトを開くと、エディターはセーフモードに入るかどうかを尋ねるダイアログを表示します。

Enter Safe Mode? ダイアログは、コンパイルエラーが発生したプロジェクトを開いたときに、セーフモードに入るかどうかを尋ねます
Enter Safe Mode? ダイアログは、コンパイルエラーが発生したプロジェクトを開いたときに、セーフモードに入るかどうかを尋ねます

この時点では、3 つの選択肢があります。

  • Enter Safe Mode (セーフモードに移行します)
  • Ignore (エラーを無視し、プロジェクトを開きます)
  • Quit (Unity を終了します)

大抵は、Enter Safe Mode を選択して、プロジェクトのエラーを解決する方が良いでしょう (あるいは、バージョン管理を使用している場合は、エラーの修正を含む変更を選択します)。セーフモードは、コンパイルエラーを解決するための最適な環境を提供するので、プロジェクトの残りの部分をインポートする前に、プロジェクトを機能する状態に素早く戻すことができます。

ただし、セーフモードに入りたくない場合もありますので、その場合は Unity を Quit (終了)、またはエラーを Ignore (無視) します。

ノート: このダイアログは Edit > Preferences > Asset Pipeline > Show Enter Safe Mode Dialog で無効にすることができます。このダイアログを無効にすると、コンパイルエラーのあるプロジェクトを開いたときに、Unity は自動的にセーフモードに移行します。

セーフモードに入らずに終了

セーフモードは、特にコンパイルエラーを修正するために設計されています。この Unity プロジェクトの一員であっても、エラーの原因となっているスクリプトには関わっておらず、どうしたらよいかわからない場合は、ダイアログで Quit を選択し、チーム内のプログラマーに連絡してアドバイスを求めてください。

エラーを無視してインポートを継続

プロジェクトを使用可能な状態にしておく必要がない場合もあります (例えば、一部のパーツをコピーするためや、単に構成を調べたりするために古いプロジェクトを開く場合など)。このような場合には、エラーを無視して、壊れた状態のプロジェクトを開くことができます。

Ignore を選択し、後にセーフモードでプロジェクトを開きたい場合は、Unity を一旦閉じて再度開くことで、Enter Safe Mode ダイアログに再度アクセスすることができます。

コンパイルエラーを無視することの意味

エラーを無視することを選択すると、Unity は残りのアセットのインポートを続行し、プロジェクトを完全に開きます。すると、以下のことが考えられます。

  • プロジェクトが使用可能な状態になっていない可能性があります。エラーが解決するまでは、プレイモードに入ることも、プロジェクトのビルドを作成することもできないかもしれません。また、プロジェクトのパッケージが正しくロードされない、または全くロードされない可能性もあります。

  • Unity は、起動時と、プロジェクトのコンパイルエラーを解決した後の 2 回、アセットをインポートする場合があります。これにより、プロジェクトを使用可能な状態にロードするのにかかる時間が長くなります。

  • プロジェクトで スクリプタブルレンダーパイプライン を使用する場合は、レンダラーパイプラインがロードされず、エラーシェーダー などの視覚的な問題が発生する可能性があります。

  • スクリプトのコンパイルエラーは、プロジェクト内で二次的なエラーを引き起こす可能性があります。例えば、プロジェクト内の ScriptedImporter がコンパイルエラーのためにロードできない場合、アセットが正しくない状態でインポートされる可能性があります。

セーフモードは、これらの問題をすべて回避できるように設計されています。

セーフモードのエディター

セーフモードでは、機能が制限された最小限のエディターインターフェースが提供されます。

セーフモードでの Unity エディター
セーフモードでの Unity エディター

Unity エディターでは、標準のエディターツールバーの代わりにエディター上部のツールバーセクションにセーフモードのバナーが表示されます。ツールバーにはセーフモードであることが表示され、Exit Safe Mode ボタンがあり、残りのエラーを無視してセーフモードを終了することができます。バナーには、プロジェクトが プレビューパッケージ を使用しているかどうかも表示されます。

Unity エディターは、セーフモードでも コードエディターとのインテグレーション を維持するため、スクリプトアセットや コンソールエラー をダブルクリックして関連するスクリプトを開くことができ、Assets メニューから C# プロジェクトを開くことができます。また、バージョン管理システム とのインテグレーションも維持されています。

セーフモードでの制限されたウィンドウ群

エディターは、セーフモードでは、以下の限られたウィンドウしか表示しません。

  • コンソールウィンドウ
  • Project ウィンドウ
  • Inspector ウィンドウ
  • Package Manager ウィンドウ

これらのウィンドウはコンパイルエラーの修正に関連するため、限られた利用可能なウィンドウです。他のウィンドウは、セーフモードでは使用できません。

セーフモードでのエディターメニュー

セーフモードでは、エディターのメインメニューにあるオプションは限られたものになります。スクリプトに関連するメニューオプションのみが表示、選択され、他のコンテンツを作成、操作するための通常のオプションは利用できません。例えば、シーンを作成したり開いたりすることはできませんし、プリミティブな形状、ライト、カメラなどのスクリプト以外のアセットを作成することもできません。GameObjectComponent メニューは含まれず、 Window メニューには限られたウィンドウのみが提供されます。

セーフモードで表示される限られたエディターメニュー。アセットを作成するための利用可能なオプションが表示されています
セーフモードで表示される限られたエディターメニュー。アセットを作成するための利用可能なオプションが表示されています

セーフモードでの Project ウィンドウ

セーフモードの Project ウィンドウには、セーフモード以外の通常の動作と比べて機能的な違いがあります。

主な違いは、コンパイル関連のアセットしか選択できないことです。その他のアセットタイプは選択できません。他のアセットタイプは、Project ウィンドウにグレーアウト表示されたままで、選択や編集はできません。

具体的には、インタラクティブに操作できるコンパイル関連のアセットタイプは以下の通りです。

  • C# ファイル (.cs)
  • DLL ファイル (.dll)
  • アセンブリ定義 (.asm)
  • 応答ファイル (.rsp)
  • ルールセットファイル (.ruleset)

また、選択できないアセットのアイコンには、そのアセットのコンテンツのプレビューが表示されません。代わりにアセットのタイプを表す一般的なアイコンが表示されます。

選択できないアセットの汎用アイコンが表示された Project ウィンドウ
選択できないアセットの汎用アイコンが表示された Project ウィンドウ

作成 (+) メニューボタンが無効になり、Project ウィンドウのコンテキストメニューの利用できるオプションが減ります。

Project ウィンドウの 作成 (+) メニューボタン。セーフモードでは無効。
Project ウィンドウの 作成 (+) メニューボタン。セーフモードでは無効。

セーフモードの終了

すべてのコンパイルエラーが解決されると、Unity は自動的にセーフモードを終了します。その後、Unity は引き続きプロジェクトを開き、アセットをインポートします。

コンパイルエラーが残っている状態でセーフモードを終了するには、セーフモードツールバーの Exit Safe Mode ボタンを選択します。これはお勧めできません (コンパイルエラーを無視することの意味 を参照)。Unity は決定を確認するダイアログを表示します。

Safe Mode ツールバーの Exit Safe Mode ボタン
Safe Mode ツールバーの Exit Safe Mode ボタン

プロジェクトにエラーが残っている状態でセーフモードを終了し、後でセーフモードに戻りたい場合は、Unity を一旦閉じて再度開くことで、Enter Safe Mode ダイアログに再度アクセスすることができます。

バッチモードのセーフモード

バッチモードでプロジェクトにコンパイルエラーが発生すると、-ignoreCompilerErrors コマンドライン引数 を使用しない限り、Unity は自動的に終了します。

スマートマージ
コマンドライン引数