はじめに
Unity エディタが重くて操作に時間がかかる時や
Hold on・Unity is busy のプログレスバーが消えずに Unity が操作できない時に
自分が試して解決した方法や、
公式フォーラムなどでこうすると解決したと報告があった方法を紹介していきます
目次
- はじめに
- 目次
- Unity プロジェクトのフォルダ内の Library フォルダを削除
- Unity プロジェクトのフォルダ内の Library/ShaderCache フォルダを削除
- GI Cache の Clean Cache を実行
- Package Manager のキャッシュを削除
- 並列インポートを有効化
- Auto Refresh を無効化
- Directory Monitoring を無効化
- Busy Progress Delay に大きな値を設定
- Disable Editor Analytics (Pro Only) を有効化
- Compress Assets on Import を無効化
- プレハブモードの Auto Save を無効化
- Scene ビューを非表示
- Scene ビューの Gizmo を無効化
- Unity エディタの Layout を Default に変更
- Reset All Layouts を実行
- シーンファイルが破損していないか確認
- Unity Collaborate から Git に移行
- JetBrains Rider の「Automatically refresh assets in Unity」を無効化
- Visual Studio の「保存時に Unity の AssetDatabase を更新」を無効化
- InitializeOnLoad / InitializeOnLoadMethod で重たい処理を実行していないか確認
- AssetPostprocessor で重たい処理を実行していないか確認
- OnDrawGizmos / OnDrawGizmosSelected で重たい処理を実行していないか確認
- AssetDatabase.StartAssetEditing を使う
- Unity と Unity プロジェクトのフォルダをウィルス対策ソフトのスキャンから除外
- Windows のファイルインデックスから除外
- Visual Studio Editor パッケージを削除
- AssetGraph の除外
- TortoiseGit をアンインストール
- Editor Iteration Profiler でボトルネックを調査
- Profiler を Editor モードにして調査
- タスクマネージャからインポートワーカープロセスを終了
- Unity プロジェクトが SSD に格納されているか確認
- PC を再起動
Unity プロジェクトのフォルダ内の Library フォルダを削除
Unity プロジェクトのフォルダ内の Library フォルダには
アセットのキャッシュなどが保存されており、
プロジェクトの規模が大きくなったりずっと開発を続けていたりすると
これらのキャッシュが不整合を起こして Unity エディタが重くなることがあるので
Unity を終了した状態で Library フォルダを削除してから Unity を起動する
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-10#post-7440350
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-9#post-7168792
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-8#post-7059478
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-7#post-6998126
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-5#post-6821444
Unity プロジェクトのフォルダ内の Library/ShaderCache フォルダを削除
Unity プロジェクトのフォルダ内の Library フォルダに含まれている
ShaderCache フォルダにはシェーダのコンパイル結果がキャッシュされるが
シェーダを頻繁に変更すると、このフォルダが肥大化して
Unity エディタが重くなることがあるので
Unity を終了した状態で ShaderCache フォルダを削除してから Unity を起動する
個々のシェーダーバリアントのコンパイル結果は、
プロジェクト内の Library/ShaderCache フォルダーにキャッシュされています。
つまり、100% 同じシェーダーやそのスニペットは、以前のコンパイル結果を再利用します。
また、頻繁に変更されるシェーダーが多くある場合は、
シェーダーキャッシュフォルダーが非常に大きくなる可能性もあります。
これはいつ削除しても問題ありません。
削除されたシェーダーバリアントが再コンパイルされるだけのことです。
また、Unity メニューの「Edit > Project Settings」を選択して
左メニューで「Editor」を選択して「Asynchronous Shader Compilation」をオフにして
非同期シェーダーコンパイルを無効化すると
ShaderCache が肥大化することを防げる可能性がある
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-10#post-7502710
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-9#post-7284955
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-8#post-7083001
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-8#post-7083754
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-7#post-6943697
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-7#post-7001594
GI Cache の Clean Cache を実行
GI のキャッシュが肥大化して Unity エディタが重くなることがあるので
Unity メニューの「Edit > Prerefences」を選択して
左メニューで「GI Cache」を選択して「Clean Cache」を押して
GI のキャッシュを削除する
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-11#post-7577272
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-10#post-7440350
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-5#post-6821444
Package Manager のキャッシュを削除
C:\Users\【ユーザー名】\AppData\Local\Unity\cache
Package Manager のキャッシュが保存される上記のフォルダを
Unity を終了した状態で削除してから Unity を起動すると
Unity エディタの動作が軽くなる可能性がある
Windows 以外での Package Manager のキャッシュの保存場所は
公式ドキュメントに記載されている
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-10#post-7440350
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-5#post-6821444
並列インポートを有効化
PC のスペックに余裕があれば並列インポートを有効化することで
プロジェクトの起動やインポートが速くなる
Auto Refresh を無効化
Unity メニューの「Edit > Prerefences」を選択して
左メニューで「General」を選択して「Auto Refresh」をオフにすると
アセット変更時の自動インポートを無効化できるので
Unity エディタの動作が軽くなる
自動インポートが無効化されるので Ctrl + R を押して手動でリフレッシュする必要がある
Unity を再生する時にアセットをリフレッシュするエディタ拡張を導入すれば
手動リフレッシュの手間を省略できる
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-10#post-7334392
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-10#post-7502710
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-9#post-7296298
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-8#post-7092877
Directory Monitoring を無効化
Unity メニューの「Edit > Prerefences」を選択して
左メニューで「General」を選択して「Directory Monitorning」をオフにすると
フォルダの監視が無効化されて Unity エディタの動作が軽くなる可能性がある
Additional asset pipeline updates include directory monitoring
on Windows for faster asset refresh,
speeding up the Refresh by updating only relevant assets
(we will add support for macOS in a future release).
We also added support for serialized files greater than 2GB.
Directory Monitoring はアセットのリフレッシュの高速化や
関連するアセットのみを更新するリフレッシュの高速化に関する機能らしい
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-10#post-7334392
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-10#post-7502710
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-9#post-7296298
Busy Progress Delay に大きな値を設定
Unity メニューの「Edit > Prerefences」を選択して
左メニューで「General」を選択して「Busy Progress Delay」に大きな値を設定すると
Hold on のプログレスバーが表示されるのを遅延して
Unity エディタが操作不能になることを防げる可能性がある
Disable Editor Analytics (Pro Only) を有効化
Unity メニューの「Edit > Preferences」を選択して
左メニューで「General」を選択して「Disable Editor Analytics (Pro Only)」をオンにして
匿名データを送信しないようにすると Unity エディタの動作が軽くなる可能性がある
このメニューは Unity Pro ライセンスを持っていると変更できる
Compress Assets on Import を無効化
Unity メニューの「Edit > Preferences」を選択して
左メニューで「General」を選択して「Compress Assets on Import」をオフにして
テクスチャインポート時の圧縮処理を無効化すると
テクスチャインポート時の Unity エディタの動作が軽くなることがある
プレハブモードの Auto Save を無効化
プレハブを開いている時に Scene ビューの「Auto Save」をオフにすると
プレハブが自動で保存されなくなり Unity エディタの動作が軽くなる
自動で保存されなくなるので編集したら手動で保存する必要がある
Scene ビューを非表示
作っているゲームによっては Scene ビューを非表示にすると Unity が軽くなる
Scene ビューの Gizmo を無効化
Scene ビューの「Gizmos」をオフにすると Scene ビューを開いている時の
Unity エディタの動作が軽くなる可能性がある
Unity エディタの Layout を Default に変更
Unity 右上の「Layout > Default」を押してレイアウトをデフォルトにすると
Unity エディタの GUI がリセットされて
Unity エディタの動作が軽くなる可能性がある
Reset All Layouts を実行
Unity 右上の「Layout > Reset All Layouts」を押してすべてのレイアウトをリセットすると
Unity エディタの GUI がリセットされて
Unity エディタの動作が軽くなる可能性がある
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-9#post-7262083
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-5#post-6821444
シーンファイルが破損していないか確認
特定のシーンを開いている時のみ Unity エディタが重い場合は
シーンファイルが破損している可能性があるため
シーンファイルを作り直すと Unity エディタの動作が軽くなる可能性がある
Unity Collaborate から Git に移行
Unity Collaborate の動作が重い可能性があるので
Unity Collaborate を使用している場合は Git に移行すると
Unity エディタの動作が軽くなる可能性がある
Unity Collaborate を使用していないプロジェクトであれば
Unity メニューの「Window > Package Manager」を選択して
「Version Control」パッケージを「Remove」すると
Unity エディタの動作が軽くなる可能性がある
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-9#post-7253225
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-7#post-6950516
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-6#post-6904742
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-6#post-6919016
JetBrains Rider の「Automatically refresh assets in Unity」を無効化
JetBrains Rider メニューの「ファイル > 設定」を選択して
左メニューで「言語 & フレームワーク > Unity Engine」を選択して
「Automatically refresh assets in Unity」をオフにして「Save」を押すと
Jetbrains Rider でコードを編集して保存した時に
Unity 側で自動でコンパイルが始まらなくなるので
Unity エディタの動作が軽くなる
Visual Studio の「保存時に Unity の AssetDatabase を更新」を無効化
Visual Studio メニューの「ツール > オプション」を選択して
左メニューで「Tools for Unity」を選択して
「保存時に Unity の AssetDatabase を更新」を「False」にして「OK」を押と
Visual Studio でコードを編集して保存した時に
Unity 側で自動でコンパイルが始まらなくなるので
Unity エディタの動作が軽くなる
InitializeOnLoad / InitializeOnLoadMethod で重たい処理を実行していないか確認
using UnityEditor; [InitializeOnLoad] public static class Example { static Example() { // 重たい処理 } }
using UnityEditor; public static class Example { [InitializeOnLoadMethod] private static void InitializeOnLoadMethod() { // 重たい処理 } }
InitializeOnLoad / InitializeOnLoadMethod で対象になっているメソッドは
Unity の再生時やコンパイル完了時にも呼び出されるため
重たい処理を実行していないか確認する
たとえば Unity エディタの初回起動時にのみ行えば良い処理であれば
上記のページの内容のように初回起動時にのみ処理を走らせるようにする
AssetPostprocessor で重たい処理を実行していないか確認
using UnityEditor; public sealed class Example : AssetPostprocessor { private static void OnPostprocessAllAssets ( string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths ) { // 重たい処理 } private void OnPreprocessTexture() { // 重たい処理 } }
AssetPostprocessor でアセットのインポート時に
重たい処理を実行していないか確認する
OnDrawGizmos / OnDrawGizmosSelected で重たい処理を実行していないか確認
using UnityEngine; public sealed class Example : MonoBehaviour { private void OnDrawGizmos() { // 重たい処理 } private void OnDrawGizmosSelected() { // 重たい処理 } }
OnDrawGizmos / OnDrawGizmosSelected で
重たい処理を実行していないか確認する
AssetDatabase.StartAssetEditing を使う
スクリプトからアセットを編集する時は
AssetDatabase.StartAssetEditing を使うと処理が速くなる
Unity と Unity プロジェクトのフォルダをウィルス対策ソフトのスキャンから除外
Windows のスタートメニューから「設定」を開いて
「更新とセキュリティ > Windows セキュリティ > ウイルスと脅威の防止」を選択して
「ウイルスと脅威の防止の設定」の欄の「設定の管理」を選択し、
「除外」の欄の「除外の追加または削除」を選択して
「除外の追加 > フォルダ」を選択して Unity や Unity プロジェクトのフォルダを
選択することでウィルス対策ソフトのスキャンから除外できて
Unity エディタの動作が軽くなることがある
詳細な手順は上記のページに記載しています
- https://docs.unity3d.com/ja/2019.4/Manual/IL2CPP-OptimizingBuildTimes.html
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-7#post-7046290
Windows のファイルインデックスから除外
Unity プロジェクトのフォルダを右クリックして「プロパティ」を選択して
「詳細設定」を押して
「このフォルダー内のファイルに対し、プロパティだけでなくコンテンツにも
インデックスを付ける」をオフにして「OK」を押して
プロパティのウィンドウでも「OK」を押して
上記のダイアログが表示されたら
「変更をこのフォルダー、サブフォルダーおよびファイルに適用する」をオンにして
「OK」を押して
適用が完了するのを待ちます
これで、その Unity プロジェクトを編集する時の Unity エディタの動作が軽くなる可能性がある
Visual Studio Editor パッケージを削除
Unity メニューの「Window > Package Manager」を選択して
「Visual Studio Editor」パッケージを選択して「Remove」を押して
Visual Studio Editor パッケージを Unity プロジェクトから削除することで
Unity エディタの動作が軽くなる可能性がある
このパッケージを削除しても Visual Studio 上でコードを編集したり
デバッガを Unity にアタッチすることは可能
AssetGraph の除外
AssetGraph を使用している場合はキャッシュが肥大化して
インポートやコンパイルに時間がかかるようになることがあるため
AssetGraph を Unity プロジェクトから削除すると Unity エディタの動作が軽くなる
TortoiseGit をアンインストール
TortoiseGit を使用している場合は
TortoiseGit をアンインストールすると Unity エディタの動作が軽くなることがある
Editor Iteration Profiler でボトルネックを調査
Editor Iteration Profiler を使うとコンパイル時間の内訳や
Unity 再生時のリロード時間の内訳を確認できるので
たとえば Asset Store で購入したアセットの処理時間が
ボトルネックになっていた、といったことが見つかるようになる
基本的な使い方は↑
Profiler を Editor モードにして調査
Unity メニューの「Window > Analytics > Profiler」を選択して
「Playmode」から「Editor」に変更して「Deep Profile」をオンにする
これでエディタのどの処理で時間がかかっているのか原因を調査できる
タスクマネージャからインポートワーカープロセスを終了
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-8#post-7061620
- https://forum.unity.com/threads/lots-of-busy-hold-on-etc.833644/page-8#post-7065661
この「Hold on...」という特定のケースについては、
タスクマネージャからインポートワーカープロセスを終了させることで回避できるはずです。
インポートワーカーは「Unity」とも呼ばれるので、エディターと区別するために、
Windowsタスクマネージャでコマンドライン欄を追加し、
インポートワーカーであるUnityプロセスをkillします (これらは-batch cmdlineフラグとワーカー名cmdlineオプションが設定されています)。
タスクマネージャからインポートワーカーと呼ばれるプロセスを終了すると
Hold on を回避できる?
Unity プロジェクトが SSD に格納されているか確認
Unity プロジェクトを HDD に格納している場合は
SSD に移動することで動作が軽くなる
どのくらい動作が軽くなるかは上記の記事に記載しています
PC を再起動
PC を再起動してから Unity エディタを起動すると動作が軽くなることがある