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