コガネブログ

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

【Unity】ゲーム画面で Overdraw を確認できる「OverdrawForUnity」紹介

はじめに 「OverdrawForUnity」を Unity プロジェクトに導入することで ゲーム画面で Overdraw を確認できるようになります 使用例 適用前 適用後 使い方 ゲーム画面で Overdraw を確認したいゲームオブジェクトに Shader が「Camera/Effect/OverDraw」のマ…

【Unity】GetComponent と TryGetComponent の違い

GetComponent の場合 using UnityEngine; public class Example : MonoBehaviour { private void Update() { var result = GetComponent<Rigidbody>(); if ( result != null ) { } } } アタッチされていないコンポーネントを GetComponent すると Unity エディタ上での</rigidbody>…

【Unity】文字列補間を使用する場合も ToString を付けたほうが GC Alloc は少なくなる

概要 using UnityEngine; using UnityEngine.Profiling; public class Example : MonoBehaviour { private void Update() { int num1 = 1; int num2 = 2; // ToString あり var sampler1 = CustomSampler.Create( "ToString あり" ); sampler1.Begin(); var …

【Unity】TextMesh Pro で数値を設定する時に GC Alloc が発生しない拡張メソッド「TMP_IntegerText.cs」紹介

ソースコード 使い方 var text = GetComponent<TMP_Text>(); text.SetText( 123 ); 検証 using TMPro; using UnityEngine; using UnityEngine.Profiling; public class Example : MonoBehaviour { public TMP_Text m_text; private void Update() { var num = 25; var </tmp_text>…

【おすすめスライド】「Unity2018/2019における最適化事情」

スライド \

【C#】高速な列挙型の API を使用できる「FastEnum」紹介

はじめに 「FastEnum」をプロジェクトに追加することで 高速な列挙型の API を使用できるようになります インストール Visual Studio メニューの「ツール>NuGet パッケージ マネージャー> ソリューションの NuGet パッケージの管理」を選択します 「参照」タ…

【Rider】Unity においてパフォーマンスがあまり良くないコードを削除したり書き換えたりする

はじめに Rider で Unity 連携を有効化すると、 Unity においてパフォーマンスがあまり良くないコードを 削除したり書き換えたりしてくれるようになります 使用例 Awake や Start、Update などは、定義しているだけで Unity から自動で呼び出されるため これ…

【Rider】Unity においてパフォーマンスがあまり良くないコードをマークする

はじめに Rider で Unity 連携を有効化すると、 Unity においてパフォーマンスがあまり良くないコードを ハイライト表示やマークして教えてくれるようになります ハイライト表示やマークの種類 例えば、Update、LateUpdate、FixedUpdate などの関数や コルー…

【おすすめスライド】「CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する」

スライド

【Unity】.NET 4.x Equivalent なら Dictionary のキーに列挙型を使用しても GC Alloc は発生しない

概要 using System.Collections.Generic; using UnityEngine; using UnityEngine.Profiling; public enum JobType { SOLDIER, } public class Example : MonoBehaviour { private void Update() { var table = new Dictionary<JobType, string> { { JobType.SOLDIER, "王国兵</jobtype,>…

【Unity】高速な Enum.ToString を使用できる「UniEnumExtension」紹介

はじめに 「UniEnumExtension」を Unity プロジェクトに導入することで 高速な Enum.ToString を使用できるようになります 比較 Enum.ToString を 1,000,000 回呼び出したときにかかった時間 機能 かかった時間 通常 1.366 秒 UniEnumExtension 0.005 秒

【Unity】未使用のアセットを検索してラベル付けできる「MarkUnused.cs」紹介

ソースコード 使い方 Unity メニューの「Assets > Mark Unused Assets」を選択してしばらく待ちます 検索が完了すると、Project ビューに未使用のアセットが表示されます 次回からも Project ビューの検索欄に「l:Unused」と入力すると 未使用のアセットをリ…

【Unity】パフォーマンス改善とデータサイズ削減についてまとめられた PDF

PDF 参考ツイート Unityについてのノウハウをまとめました。パフォーマンス改善とデータサイズ削減を中心として書いています。https://t.co/J0LGIoNDA1#Unity #UnityTips— 坂本龍 (@SakamotoRyuu) August 5, 2019

【Unity】FPS、GC 発生回数、メモリ使用量を実機で確認できるプロファイラの UI「UniSimpleProfiler」を GitHub に公開しました

はじめに FPS、GC 発生回数、メモリ使用量を実機で確認できるプロファイラの UI 「UniSimpleProfiler」を GitHub に公開しました(実機なら GC Alloc は発生しません) バージョン Unity 2018.3.9f1 準備 UniSimpleProfiler は TextMesh Pro を使用するため…

【Unity】GC Alloc が発生しない Stack を使用できる「StackList」紹介

概要 「StackList」を Unity プロジェクトに導入することで GC Alloc が発生しない Stack を使用できるようになります 使用例 using Hont; using System.Collections.Generic; using UnityEngine; using UnityEngine.Profiling; public class Example : Mono…

【Unity】GC Alloc の発生が少ない Linq を使用できる「smooth.foundations」紹介

はじめに 「smooth.foundations」を Unity プロジェクトに導入することで GC Alloc の発生が少ない Linq を使用できるようになります 使用例 using Smooth.Slinq; using Smooth.Slinq.Context; using System.Linq; using UnityEngine; using UnityEngine.Pro…

【Unity】TextMesh Pro でモバイル向けのシェーダを使用する

概要 TextMesh Pro の FontAtlas などに含まれるマテリアルを選択して Shader を「TextMeshPro/Mobile」以下の物に変更することで モバイル向けのシェーダに切り替えることができます

【Unity】Scene ビュー同様にゲーム画面でミップマップレベルを可視化できる「DebugGPU」紹介

はじめに https://github.com/slmao/DebugGPU 「DebugGPU」を Unity プロジェクトに導入することで Scene ビュー同様にゲーム画面でミップマップレベルを可視化できるようになります 使用例 Scene ビュー Game ビュー 使い方 シーンのカメラに「DebugGPU」コ…

【Unity】テクスチャのミップマップのバイアスを変更する方法

方法1 using UnityEditor; using UnityEngine; public sealed class Example : AssetPostprocessor { private void OnPostprocessTexture( Texture2D texture ) { var importer = AssetImporter.GetAtPath( assetPath ) as TextureImporter; importer.mipMap…

【Unity】Scene ビューでミップマップレベルを可視化する方法

概要 Scene ビューの「Shaded」を押して 「Mipmaps」を押すと ミップマップレベルを可視化できます 赤 描画密度が高い テクスチャ解像度が必要以上に大きい 青 描画密度が低い テクスチャ解像度を大きくしても良い 参考サイト様 https://radiumsoftware.tumb…

【Unity】モバイルでも高速に動く影シェーダ「PlannarShadowForUnity」紹介

はじめに 「PlannarShadowForUnity」はモバイルでも高速に動く影シェーダです 使用例 使い方 影を適用したいオブジェクトの Mesh Renderer の 「Cast Shadow」を「Off」にして、「Receive Shadows」をオフにしておきます 影を適用したいオブジェクトと同じメ…

【ReSharper】Unity においてパフォーマンスがあまり良くないコードを削除したり書き換えたりする

はじめに ReSharper で Unity 連携を有効化すると、 Unity においてパフォーマンスがあまり良くないコードを 削除したり書き換えたりしてくれるようになります Unity 連携の有効化 Unity 連携の有効化の方法は上記の記事で記載しております 使用例 Awake や …

【ReSharper】Unity においてパフォーマンスがあまり良くないコードをハイライト表示する

はじめに ReSharper で Unity 連携を有効化すると、 Unity においてパフォーマンスがあまり良くないコードを ハイライト表示して教えてくれるようになります Unity 連携の有効化 Unity 連携の有効化の方法は上記の記事で記載しております ハイライト表示の種…

【Unity】モバイルで高速に動作するモーションブラーを使用できる「Fast Mobile Camera Motion Blur」紹介($55.99)

はじめに 「Fast Mobile Camera Motion Blur」を Unity プロジェクトに導入することで モバイルで高速に動作するモーションブラーを使用できるようになります 使用例 使い方 シーンのカメラに「Fast Motion Blur」をアタッチして 「FastMotionBlur」マテリア…

【Unity】LUT が使用できる「Fast LUT」紹介($10)

はじめに 「Fast LUT」を Unity プロジェクトに導入することで LUT が使用できるようになります 使用例 適用前 適用後 使い方 LUT テクスチャを右クリックして 「Create > FastLUT > Convert 2D LUT Texture to FastLUT」を選択して Fast LUT 専用のアセット…

【Unity】Android アプリ開発で使用できるプロファイラがまとめられている公式ドキュメント

概要 上記の公式ドキュメントで Android アプリ開発で使用できるプロファイラがまとめられています

【おすすめスライド】「メモリと闘う者達」

スライド

【おすすめ記事】「Unityで設定できるテクスチャの圧縮フォーマットについて」

リンク

【Unity】モバイルでも高速に動作するカラーコレクション(LUT)、ブラー、ブルームが使用できる「Fast Mobile Post Processing」紹介($6.99)

はじめに 「Fast Mobile Post Processing」を Unity プロジェクトに導入することで モバイルでも高速に動作するカラーコレクション(LUT)、ブラー、 ブルームが使用できるようになります 使用例 適用前 適用後 カラーコレクション(LUT)、ブラー、ブルーム…

【Unity】円柱型、球形のビルボード(フォグ適用可)を使用できる「Ultimate Billboard」紹介($5)

はじめに 「Ultimate Billboard」を Unity プロジェクトに導入することで 円柱型、球形のビルボード(フォグ適用可)を使用できるようになります 使用例 マテリアルの Shader を「Sprites/UltimateBillboard」を変更すると使用できます 項目 内容 Use Fog フ…