Unity のセーフモードは、スクリプトのコンパイルエラーがあるプロジェクトを開いたときに、Unity エディターが使用するモードです。セーフモードは、コンパイルエラーを解決するための最適な環境を提供するように設計されており、プロジェクトを素早く機能的な状態に戻すことができます。
セーフモードでは、エディターのユーザーインターフェースは機能が制限された最小限のバージョンになります。また、スクリプト関連のアセットのみをインポートし、スクリプト以外のアセット (モデル、マテリアル、テクスチャ、プレハブなど) のインポートはできません。これは、セーフモードがコンテンツ制作のためのものではなく、コンパイルエラーを解決するためだけのものだからです。
セーフモードでは、プロジェクトやそのパッケージからマネージドコードが実行されることはありません。つまり、Editor スクリプト、AssetPostprocessor、ScriptedImporter のような独自のスクリプトは実行されません。また、セーフモードでは、アセンブリのオーバーライド、Burst と Roslyn アナライザーも無効になります。これにより、セーフモードのエディターは、ひどく壊れた状態のプロジェクトを開いた場合でも、常に完全な機能と信頼性を保つことができます。
Unity は、コンパイルエラーがなくなったことを検知すると、自動的にセーフモードを終了します。セーフモードを終了すると、Unity はプロジェクトを完全にインポートし、エディターは通常の全機能を回復します。
一般的にコンパイルエラーが発生するのは、以下のような場合です。
コンパイルエラーが発生したプロジェクトをセーフモードなしで開くと、さまざまな問題が発生します。例えば、プロジェクト内の パッケージ が正しくロードされず、機能しない場合があります。また、アセットが正しくインポートされず、ライブラリ や キャッシュサーバー に正しくキャッシュされない場合があります。
このような状況では、通常、エラーを解決するまでプロジェクトの残りの部分をインポートしたくありません。セーフモードのツールを使って、このようなスクリプト関連の問題を自分で解決したり、バージョン管理機能を使ってプロジェクトを新しいバージョンに更新し、プロジェクトのすべてをインポートをすることを待たずにエラーを解決できます。
コンパイルエラーが発生しているプロジェクトを開くと、エディターはセーフモードに入るかどうかを尋ねるダイアログを表示します。
この時点では、3 つの選択肢があります。
大抵は、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 エディターでは、標準のエディターツールバーの代わりにエディター上部のツールバーセクションにセーフモードのバナーが表示されます。ツールバーにはセーフモードであることが表示され、Exit Safe Mode ボタンがあり、残りのエラーを無視してセーフモードを終了することができます。バナーには、プロジェクトが プレビューパッケージ を使用しているかどうかも表示されます。
Unity エディターは、セーフモードでも コードエディターとのインテグレーション を維持するため、スクリプトアセットや コンソールエラー をダブルクリックして関連するスクリプトを開くことができ、Assets メニューから C# プロジェクトを開くことができます。また、バージョン管理システム とのインテグレーションも維持されています。
エディターは、セーフモードでは、以下の限られたウィンドウしか表示しません。
これらのウィンドウはコンパイルエラーの修正に関連するため、限られた利用可能なウィンドウです。他のウィンドウは、セーフモードでは使用できません。
セーフモードでは、エディターのメインメニューにあるオプションは限られたものになります。スクリプトに関連するメニューオプションのみが表示、選択され、他のコンテンツを作成、操作するための通常のオプションは利用できません。例えば、シーンを作成したり開いたりすることはできませんし、プリミティブな形状、ライト、カメラなどのスクリプト以外のアセットを作成することもできません。GameObject と Component メニューは含まれず、 Window メニューには限られたウィンドウのみが提供されます。
セーフモードの Project ウィンドウには、セーフモード以外の通常の動作と比べて機能的な違いがあります。
主な違いは、コンパイル関連のアセットしか選択できないことです。その他のアセットタイプは選択できません。他のアセットタイプは、Project ウィンドウにグレーアウト表示されたままで、選択や編集はできません。
具体的には、インタラクティブに操作できるコンパイル関連のアセットタイプは以下の通りです。
また、選択できないアセットのアイコンには、そのアセットのコンテンツのプレビューが表示されません。代わりにアセットのタイプを表す一般的なアイコンが表示されます。
作成 (+) メニューボタンが無効になり、Project ウィンドウのコンテキストメニューの利用できるオプションが減ります。
すべてのコンパイルエラーが解決されると、Unity は自動的にセーフモードを終了します。その後、Unity は引き続きプロジェクトを開き、アセットをインポートします。
コンパイルエラーが残っている状態でセーフモードを終了するには、セーフモードツールバーの Exit Safe Mode ボタンを選択します。これはお勧めできません (コンパイルエラーを無視することの意味 を参照)。Unity は決定を確認するダイアログを表示します。
プロジェクトにエラーが残っている状態でセーフモードを終了し、後でセーフモードに戻りたい場合は、Unity を一旦閉じて再度開くことで、Enter Safe Mode ダイアログに再度アクセスすることができます。
バッチモードでプロジェクトにコンパイルエラーが発生すると、-ignoreCompilerErrors
コマンドライン引数 を使用しない限り、Unity は自動的に終了します。