コガネブログ

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

【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…

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

検証内容 約 100 MB の文字列を 100 回 File.WriteAllText する処理を foreach で書いた場合と Parallel.ForEach で書いた場合の速度を検証 検証環境 Unity 2021.2.7f1 Windows IL2CPP ビルド Android IL2CPP ビルド 検証結果(Unity エディタ) 項目 かかっ…

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

検証内容 約 100 MB の文字列を 100 回 File.WriteAllText する処理を for で書いた場合と Parallel.For で書いた場合の速度を検証 検証環境 Unity 2021.2.7f1 Windows IL2CPP ビルド Android IL2CPP ビルド 検証結果(Unity エディタ) 項目 かかった時間 f…

【C#】各 LINQ ライブラリのベンチマークを確認できる「LinqBenchmarks」紹介

はじめに 上記のリポジトリで各 LINQ ライブラリのベンチマークを確認できます

【C#】ゼロアロケーションの LINQ を使用できる「StructLinq」紹介

はじめに 「StructLinq」を Unity プロジェクトに導入することで ゼロアロケーションの LINQ を使用できるようになります 検証環境 Unity 2021.2.7f1 Windows IL2CPP ビルド 検証結果 using System; using System.Linq; using StructLinq; using UnityEngine…

【Unity】計測した処理時間を Chrome でプロファイリングできるようにするパッケージ「Kogane Complete Events Tracer」を GitHub に公開しました

リポジトリ 使用例 using System.IO; using System.Threading.Tasks; using Kogane.CompleteEventsTracer; using UnityEngine; public sealed class Example : MonoBehaviour { private async void Start() { Debug.Log( "開始" ); var tracer = new Complet…

【Unity】Attribute を指定するだけでプロパティや関数の呼び出し時にログ出力できる「Cecil Attributes」紹介

はじめに 「Cecil Attributes」を Unity プロジェクトに導入することで Attribute を指定するだけでプロパティや関数の呼び出し時にログ出力できるようになります ResetStaticAttribute // デフォルトでは Subsystem Registration のタイミングで // default…

【Unity】指定した範囲内の処理でどのくらい GC Alloc が発生したかログ出力するクラス

ソースコード using System; using Unity.Profiling; using UnityEngine; public sealed class CheckGCAllocScope : IDisposable { #if ENABLE_RELEASE public void Dispose() { } public static CheckGCAllocScope Create( string name ) { return default;…

【Unity】TextMesh Pro の Font Asset Creator の Packing Method が Fast と Optimize でどのくらい時間に差が出るか

はじめに TextMesh Pro の Font Asset Creator の Packing Method を Fast にした場合と Optimize にした場合でどのくらい時間に差が出るか検証 Font Asset 生成時の各種設定は上記の通り 検証に使用されていただいたフォントは上記サイト様で紹介されている…

【Unity】TextMesh Pro の Font Asset Creator で Auto Sizing ではなく Custom Size を使うと Generate が速くなる

検証内容 「ラノベPOPフォント」で日本語を含む TextMesh Pro のフォントを作成する場合、 Sampling Point Size を「Auto Sizing」にした場合と「Custom Size」にした場合で Font の Generate が完了するまでにどのくらい時間の差が出るか検証 検証環境 Wind…

【Unity】クラスや構造体を引数に渡す時の速さを比較

検証内容 100 個の string 型のフィールドを持つ 1 億個の クラスのインスタンスを引数に渡す場合 構造体のインスタンスを引数に渡す場合 構造体のインスタンスを参照引数(ref)に渡す場合 構造体のインスタンスを入力参照引数(in)に渡す場合 の速度を比…

【Unity】アセットバンドルを並列ビルドするとどのくらい高速化できるか

検証内容 アセットバンドルが約 3,700 個存在する Unity プロジェクトで検証 検証環境 Windows 10 Unity 2020.3.25f1 クリーンビルドした場合 項目 アセットバンドルのビルドにかかった時間 通常 16分24秒 並列ビルド(スレーブ 2 個) 12分39秒 並列ビルド…

【Unity】StreamingAssets 内のアセットは無視フォルダに格納するとインポートをスキップできる

検証内容 たとえば StreamingAssets フォルダに 大量のアセットを格納すると インポートに長い時間がかかってしまいます ゲームをビルドする時にアセットバンドルを StreamingAssets にコピーしてからビルドする場合、 ゲームのビルドのたびに長いインポート…

【Unity】Unity 2021.2 の Build Settings で設定できる Asset Import Overrides をコマンドライン引数から指定する方法

概要 Unity 2021.2 の Build Settings で設定できる Asset Import Overrides を Unity プロジェクトを開く時のコマンドライン引数で指定したい場合は Unity Hub でプロジェクトの行の右端の三点リーダを押して 「コマンドライン引数を加える」を選択して -ov…

【Unity】プロジェクトを開く時のプラットフォームによってインポート時間に差が出るか

検証内容 テクスチャと 3D モデルが合計約 4,000 個存在する Unity プロジェクトで検証 Library フォルダを削除した状態でプロジェクトを開くのにかかる時間を計測 Android、iOS、Windows のプラットフォームごとでインポート時間に差が出るか検証 並列イン…

【Unity】ForceReserializeAssets するとインポートは速くなるか

検証内容 テクスチャと 3D モデルが合計約 4,000 個存在する Unity プロジェクトで検証 Library フォルダを削除した状態でプロジェクトを開くのにかかる時間を計測 古いバージョンからアップデートした後に ForceReserializeAssets を実行した場合と しなか…

【Unity】Unity 2021.2 で Unity Accelerator を使うとインポートがどれだけ速くなるか

検証内容 テクスチャと 3D モデルが合計約 4,000 個存在する Unity プロジェクトで検証 Library フォルダを削除した状態でプロジェクトを開くのにかかる時間を計測 Unity Accelerator を使う場合と使わない場合でかかった時間を比較 並列インポートの設定は…

【Unity】Unity 2021.2 で並列インポートを使うとインポートがどれだけ速くなるか

検証内容 テクスチャと 3D モデルが合計約 4,000 個存在する Unity プロジェクトで検証 Library フォルダを削除した状態でプロジェクトを開くのにかかる時間を計測 並列インポートが有効な場合と無効な場合でかかった時間を比較 並列インポート有効時の設定…

【Unity】Unity 2021.2 でプロジェクトのインポートにかかった時間の詳細を確認する方法

概要 Unity メニューの「Window > Analysis > Import Activity」を選択するか Project ウィンドウでアセットを右クリックして 「View in Import Activity Window」を選択するか Inspector のタブを右クリックして「Open in Import Activity Window」を選択す…

【Unity】Unity 2021.2 でアセットのインポート時に使用された AssetPostprocessor を確認する方法

概要 アセットの Inspector の「Asset PostProcessors」の欄を開くと そのアセットのインポート時に使用された AssetPostprocessor を一覧で確認できます

【Unity】Unity 2021.2 でアセットの並列インポートを有効にする方法

概要 Unity メニューの「Edit > Project Settings」を開いて 左メニューで「Editor」を選択して「Parallel Import」をオンにすると アセットの並列インポートを有効化できます 記事執筆時点で並列インポートに対応しているアセットは以下のとおりです Textur…

【Unity】Unity 2020.3 から 2021.2 でテクスチャのインポート時間がどれだけ短縮されたか計測

はじめに 100 個のテクスチャが格納されている Unity プロジェクトで [MenuItem( "Tools/Reimport" )] public static void Reimport() { var sw = Stopwatch.StartNew(); AssetDatabase.ImportAsset ( "Assets/Textures", ImportAssetOptions.ForceUpdate | …

【Unity】アセットの依存関係を調査できる「Asset Lens」紹介

はじめに 「Asset Lens」を Unity プロジェクトに導入することで アセットの依存関係を調査できるようになります クイックスタート 「Index Wizard」ウィンドウで「Generate」を押すと 依存関係の調査が始まるのでしばらく待ちます 調査が完了したら依存関係…

【Unity】メモリが許す限り Profile を記録できる簡易プロファイラ「UnityProfilerLiteKun」紹介

はじめに 「UnityProfilerLiteKun」は メモリが許す限り Profile を記録できる簡易プロファイラです 使用例 クイックスタート Unity メニューの「Window > UTJ > UnityProfilerLiteKun」を押して 通常の Profile と同様にビルドしたプレイヤーに接続して レ…