コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【C#】string.StartsWith や string.EndsWith は引数に StringComparison.Ordinal を指定すると処理が速くなる

検証用スクリプト using System; using System.Diagnostics; using UnityEngine; using Debug = UnityEngine.Debug; public class Example : MonoBehaviour { public int m_count = 1_000_000; private void Start() { const string path = "Assets/Example.…

【Unity】Scripting Define Symbols にシンボルが定義されていない場合にのみ Assembly Definition を有効化する方法

概要 Define Constraints に入力するシンボルの先頭に ! をつけると そのシンボルが Scripting Define Symbols に定義されていない場合にのみ Assembly Definition が有効化されるようになります 参考サイト様

【Unity】Unity 2022 から PolygonCollider2D などでポリゴン数を減らせるようになった

概要 Unity 2022 から PolygonCollider2D などで Use Delaunay Mesh をオンにすると ポリゴン数を減らせるようになった (左がオフ、右がオン) 参考サイト様

【Unity】スプライトの Custom Outline を設定した場合としなかった場合の処理速度比較

検証内容 30,000 個のスプライトをシーンに配置 スプライトの Custom Outline を設定した場合としなかった場合の FPS を比較 検証環境 Unity 2021.3.1f1 Custom Outline を設定した場合 36 ~ 39 FPS Custom Outline を設定しなかった場合 38 ~ 42 FPS 結論 …

【Unity】BoxCollider2D と CircleCollider2D の処理速度比較

検証内容 20,000 個のスプライトをシーンに配置 スプライトに BoxCollider2D をつけた場合と CircleCollider2D をつけた場合の FPS を比較 検証環境 Unity 2021.3.1f1 BoxCollider2D の場合 54 ~ 57 FPS CircleCollider2D の場合 55~ 56 FPS 結論 処理速度に…

【Unity】スクリプトからアセットを編集する時は AssetDatabase.StartAssetEditing を使うと処理が速くなる

はじめに エディタ拡張でスクリプトからマテリアルを 1,000 個作成する時に AssetDatabase.StartAssetEditing を使う場合と使わない場合で 処理速度がどのくらい変わるか調査してみた 検証環境 Windows 10 Unity 2021.1.0f1 検証用スクリプト AssetDatabase.…

【Unity】Scene ビューを非表示にすると Unity が軽くなる

検証内容 3D モデルが大量に配置されているシーンを再生している時に Scene ビューを表示する場合と非表示しない場合の FPS を比較 検証環境 Unity 2021.3.1f1 Scene ビューを表示する場合 31 ~ 32 FPS Scene ビューを表示しない場合 41 ~ 43 FPS 結論 作っ…

【Unity】Asset Import Overrides を設定した時のプロジェクトの起動時間を検証

はじめに Unity Hub でプロジェクトを開く時に コマンドライン引数で Asset Import Overrides を設定した際に プロジェクトの起動時間がどのくらい変化するかを検証してみた 検証環境 Windows 10 Unity 2021.3.1f1 Unity Accelerator 未使用 Parallel Import…

【Unity】IL2CPP Code Generation を Faster (smaller) builds にするとビルドが速くなる

はじめに IL2CPP Code Generation を「Faster runtime」にした場合と 「Faster (smaller) builds」にした場合でビルド時間にどのような差が出るか検証してみた 検証環境 Windows 10 Unity 2021.3.1f1 WebGL ビルド 検証結果 ビルド回数 Faster runtime Faste…

【Unity】WebGL ビルドで Code Optimization を Speed から Size にしたらビルドが速くなった

はじめに WebGL ビルドで Code Optimization を「Speed」にした場合と 「Size」にした場合でビルド時間と成果物のサイズにどのような差が出るか検証してみた 検証環境 Windows 10 Unity 2021.3.1f1 WebGL ビルド ビルド時間 ビルド回数 Speed Size 1 回目 5…

【Unity】UniRx のオブジェクトプールの使用例

スクリプト 実行例 プールにオブジェクトが不足している場合は新規で生成されます プールに非アクティブなオブジェクトが存在する場合は 新規で生成せずに非アクティブなオブジェクトをアクティブにします Clear 関数でプールをリセットできます GC Alloc に…

【Unity】Unity プロジェクトにデフォルトで入っているパッケージをすべて削除すると Unity 再生時の待ち時間が短くなる

検証内容 Unity プロジェクトにデフォルトで入っているパッケージを すべて削除した場合に Unity 再生時の待ち時間がどのくらい短くなるか検証 検証環境 Unity 2021.3.1f1 検証結果 項目 待ち時間 パッケージ削除前 3.3 秒 パッケージ削除後 1.4 秒 パッケー…

【Unity】Unity プロジェクトにデフォルトで入っているパッケージをすべて削除するとコンパイルが速くなる

検証内容 Unity プロジェクトにデフォルトで入っているパッケージを すべて削除した場合にどのくらいコンパイルが速くなるか検証 検証環境 Unity 2021.3.1f1 検証結果 項目 コンパイル時間 パッケージ削除前 3.2 秒 パッケージ削除後 2.0 秒 パッケージ削除…

【Unity】エディタをデバッグモードにすると Unity 再生時の待ち時間がどのくらい増えるか

検証内容 エディタをデバッグモードにすると Unity 再生時の待ち時間がどのくらい増えるか検証してみた 検証環境 Unity 2021.3.1f1 検証結果 項目 再生時の待ち時間 リリースモード 2.9 秒 デバッグモード 3.1 秒 JetBrains Rider 起動中 3.6 秒 JetBrains R…

【Unity】Unity プロジェクトを SSD ではなく HDD に格納すると起動時間がどのくらい遅くなるか

検証環境 Windows 10 Unity 2022.1.0f1 Library フォルダを削除した状態で起動時間を検証 検証結果 項目 プロジェクトの起動にかかった時間 SSD 5分30秒 HDD 11分53秒

【Unity】スプライトを非表示にするだけなら非アクティブにするより enabled をオフにする方が処理が速い

検証内容 20,000 個のスプライトをシーンに配置 表示の有効無効を切り替えるために毎フレーム GameObject.SetActive を使用した場合と SpriteRenderer.enabled を使用した場合の FPS を比較 検証環境 Unity 2021.3.1f1 GameObject.SetActive の場合 0 FPS Sp…

【Unity】シンプルなテキストは TextMesh Pro を使わずにスプライトフォントを自作した方が処理が速い

検証内容 上記のように 0.1 秒ごとに表示が変化するテキストを シーンに 5,000 個配置する場合に TextMesh Pro で表示した時と自作のスプライトフォントで表示した時の FPS を比較 検証環境 Unity 2021.3.1f1 TextMesh Pro の場合 6 FPS 自作のスプライトフ…

【Unity】Unity Search でアセットの依存関係をグラフにして確認できる

はじめに Unity Search の公式の拡張機能を導入すると アセットの依存関係をグラフで可視化できるようになります 検証環境 Unity 2021.3.1f1 導入方法 上記の記事を参考にしてください 使い方 Unity メニューの「Window > Search > Dependency Graph Viewer…

【Unity】Unity Search ですべてのアセットの依存関係を簡単かつ高速に確認できる

はじめに Unity Search の公式の拡張機能を導入すると アセットの依存関係を簡単かつ高速に確認できます https://github.com/Unity-Technologies/com.unity.search.extensions https://github.com/Unity-Technologies/com.unity.search.extensions/wiki/depe…

【Unity】シンプルなスプライトアニメーションは Animator を使わずに自作した方が処理が速い

検証内容 10,000 個のスプライトをシーンに配置 Unity の Animator を使用してスプライトアニメーションを再生した場合と、 自作の C# スクリプトでスプライトアニメーションを再生した場合の FPS を比較 検証環境 Unity 2021.3.1f1 Unity の Animator を使…

【Unity】Unity 関連のフォルダをウィルス対策のスキャンから除外するとプロジェクトの起動やアセットのインポートが速くなる

はじめに Unity 関連のフォルダを Windows Defender のウィルス対策スキャンから除外すると プロジェクトの起動時間がどのくらい変化するか検証してみた 目次 はじめに 目次 検証環境 検証結果 除外を手動で設定する方法 除外を自動で設定する方法 関連記事 …

【Unity】並列インポートを有効にするとプロジェクトの起動やアセットのインポートが速くなる

はじめに Project Settings の「Editor > Parallel Import」を有効にした場合と無効にした場合で プロジェクトの起動時間がどのくらい変化するか検証してみた 検証環境 Windows 10 Unity 2021.3.1f1 Library フォルダを削除した状態で起動時間を検証 検証結…

【Unity】Unity 2021 から標準で使用できるようになったオブジェクトプールの使用例

スクリプト 上記のスクリプトをシーンのゲームオブジェクトにアタッチして実行すると オブジェクトプールの動作を確認できます 実行例 プールにオブジェクトが不足している場合は新規で生成されます プールに非アクティブなオブジェクトが存在する場合は 新…

【Unity】Dictionary のキーに列挙型を使う時のパフォーマンスを測定

ソースコード using System; using System.Collections.Generic; using NUnit.Framework; using Unity.PerformanceTesting; // Dictionary のキーに列挙型を使用する時のパフォーマンスを測定するクラス public sealed class DictionaryEnumKeyTest { // 検…

【Unity】Dictionary のキーにタプルや構造体を使う時のパフォーマンスを測定

ソースコード using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using NUnit.Framework; using Unity.PerformanceTesting; // Dictionary のキーにタプルと構造体を使用する時のパフォーマンスを測定するクラス pub…

【Unity】Profiler を Unity エディタとは別のプロセスで起動する方法

概要 Unity メニューの「Window > Analysis > Profiler (Standalone Process)」を選択して 確認ダイアログで「OK」を押すと Unity エディタとは別のスタンドアローンアプリとして Profiler を起動できます 参考サイト様

【Unity】Dictionary のキーに構造体を使う時のパフォーマンスを測定

ソースコード using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using NUnit.Framework; using Unity.PerformanceTesting; // Dictionary のキーに構造体を使用する時のパフォーマンスを測定するクラス public seal…

【Unity】StreamingAssets にファイルをコピーする時は .meta を一緒に作るとインポート時間を短縮できる

検証内容 10,000 個のファイルを StreamingAssets にコピーする時に [MenuItem( "Tools/Copy Files" )] private static void CopyFiles() { AssetDatabase.StartAssetEditing(); foreach ( var path in Directory.GetFiles( "Files" ) ) { var filename = Pa…

【Unity】複数の小さなテキストファイルの書き込みを foreach と Parallel.ForEach で実行した場合の速度検証

検証内容 10,000 回 File.WriteAllText を実行する処理を foreach で書いた場合と Parallel.ForEach で書いた場合の速度を検証 検証環境 Unity 2021.2.7f1 Windows IL2CPP ビルド Android IL2CPP ビルド 検証結果(Unity エディタ) 項目 かかった時間 forea…

【Unity】複数の小さなテキストファイルの書き込みを for と Parallel.For で実行した場合の速度検証

検証内容 10,000 回 File.WriteAllText を実行する処理を for で書いた場合と Parallel.For で書いた場合の速度を検証 検証環境 Unity 2021.2.7f1 Windows IL2CPP ビルド Android IL2CPP ビルド 検証結果(Unity エディタ) 項目 かかった時間 for 2.83 秒 P…