コガネブログ

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

【Unity】WebGL で Compression Format によってどのくらいビルド時間に差がでるか

検証環境 Unity 2019.2.15f1 空の 2D プロジェクト 検証結果 Compression Format ビルド時間 Disabled 46 秒 Gzip 47 秒 Brotli 123 秒 補足 gzip: デフォルト設定。gzip ファイルは Brotli ファイルより大きいですが、ビルドにかかる時間が短く、http と ht…

【Unity】構造体をインターフェイスで受け取ると GC Alloc が発生するが Generic 制約でインターフェイスを指定すると発生しない

概要 using UnityEngine; public interface ICharacter { } public struct Character : ICharacter { } public class Example : MonoBehaviour { private Character m_character = new Character(); private void Update() { Hoge1( m_character ); } privat…

【Unity】System.Enum で引数を受け取ると GC Alloc が発生するが Generic 制約 で Enum を指定すると発生しない

概要 using System; using UnityEngine; public class Example : MonoBehaviour { private enum Type { GRASS, FIRE, WATER, } private void Update() { Hoge1( Type.FIRE ); } private void Hoge1( Enum value ) { } } System.Enum で引数を受け取ると GC A…

【Unity】ローカル変数をキャプチャする場合、その処理が実行されなくても GC Alloc は発生する

概要 using System.Linq; using UnityEngine; public class Example : MonoBehaviour { private static string [] m_list = { "フシギダネ", "フシギソウ", "フシギバナ", }; private void Update() { var name = "ピカチュウ"; // ここで return するので r…

【Visual Studio】ラムダ式の => にカーソルを重ねるとキャプチャされている変数を確認できる

概要 ラムダ式の => にカーソルを重ねるとキャプチャされている変数を確認できます 参考サイト様 https://www.slideshare.net/xin9le/dotnetperformancetips-170268354

【Unity】LINQ の拡張メソッドを自作して GC Alloc を減らす方法

概要 using System.Linq; using UnityEngine; public class Example : MonoBehaviour { private static string[] m_list = { "フシギダネ", "フシギソウ", "フシギバナ", }; private void Update() { var name = "ピカチュウ"; var result = m_list.Where( c…

【Unity】ゲームのパフォーマンスに影響を与えるソースコードやプロジェクトの設定を分析できる「Project Auditor」紹介

はじめに 「Project Auditor」を Unity プロジェクトに導入することで ゲームのパフォーマンスに影響を与えるソースコードやプロジェクトの設定を 分析できるようになります (この記事を書いた時点ではまだ実験中の機能とのことです) 使い方 Unity メニュ…

【Unity】Xcode プロジェクトをキャッシュしてビルド時間を削減できる「UnityXcodeCache」紹介

はじめに 「UnityXcodeCache」を Unity プロジェクトに導入することで Xcode プロジェクトをキャッシュしてビルド時間を削減できようになります 使い方 「Tools > Xcode > WriteCacheXcode」を実行します Xcode プロジェクトをビルドします 「Tools > Xcode …

【ReSharper】Unity におけるコードの問題点を見つける

はじめに ReSharper で Unity 連携を有効化すると、Unity において問題のあるコードに 警告の波線が表示されたり、ハイライト表示されるようになります この記事では、どのようなコードに警告の波線やハイライトが表示されるか紹介していきます 目次 はじめ…

【Rider】Unity において問題のあるコード(30パターン以上)には下線で警告が表示される

はじめに Rider で Unity 連携を有効化すると、Unity において問題のあるコードに 警告の波線が表示されたり、ハイライト表示されるようになります この記事では、どのようなコードに警告の波線やハイライトが表示されるか紹介していきます 目次 はじめに 目…

【Unity】uGUI のクリックのパフォーマンスを最適化する方法がまとめられたサイト様

概要 https://networm.me/2019/10/06/unity-ugui-eventsystem-optimization/ https://blog.csdn.net/cyf649669121/article/details/83661023 https://blog.csdn.net/cyf649669121/article/details/83785539 https://blog.csdn.net/cyf649669121/article/deta…

【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における最適化事情」

スライド \

【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」紹介

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

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