コガネブログ

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

【Unity】Profiler の項目に紐付いているオブジェクトを表示する方法

概要 Profiler の「No Details」を「Show Related Objects」に変更することで Profiler の項目に紐付いているオブジェクトを確認できるようになります

【Unity】SpriteRenderer で FullRect のスプライトを使用した時と Tight のスプライトを使用した時の処理速度の比較メモ

検証環境 Unity 2019.3.10f1 Android Mono2x Android 8.0.0 表示するスプライト数:100個 検証結果 Mesh Type FPS Full Rect 28 FPS Tight 60 FPS

【Unity】TextMesh Pro の SetText 関数で文字列を設定する場合、文字列が変化しない場合でも UI のリビルドが走る

検証環境 Unity 2019.3.10f1 TextMesh Pro 2.0.1 概要 TMP_Text.cs を見てみると public string text { get { return m_text; } set { if (m_text == value) return; m_text = old_text = value; m_inputSource = TextInputSources.String; m_haveProperties…

【Unity】IL2CPP でインクリメンタルビルドを有効化するかどうかを設定できる「PlayerSettings.SetIncrementalIl2CppBuild」

概要 PlayerSettings.SetIncrementalIl2CppBuild( BuildTargetGroup.iOS, true ); 「PlayerSettings.SetIncrementalIl2CppBuild」を使用することで IL2CPP でインクリメンタルビルドを有効化するかどうかを設定できます

【Unity】スプライトからメッシュを生成するスクリプト

ソースコード using System; using System.Linq; using UnityEngine; public static class SpriteUtils { public static Mesh SpriteToMesh( Sprite sprite ) { var mesh = new Mesh(); mesh.SetVertices( Array.ConvertAll( sprite.vertices, x => ( Vector…

【おすすめスライド】「なるほど3Dグラフィック描画の仕組み」

スライド https://monolizm.com/sab/pdf/%E7%AC%AC%E4%B8%89%E5%9B%9E_%E3%83%97%E3%83%AC%E3%82%BC%E3%83%B3%E8%B3%87%E6%96%99(%E3%81%AA%E3%82%8B%E3%81%BB%E3%81%A93D%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E6%8F%8F%E7%94%BB%E3%81%A…

【おすすめスライド】「RENDERING 最適化「禍つヴァールハイト」」

スライド

【おすすめスライド】「Refresh what you know about AssetDatabase.Refresh()- Unite Copenhagen 2019」

スライド

【おすすめスライド】「Speed up your asset imports for big projects - Unite Copenhagen 2019」

スライド

【Unity】AssetDatabase.CreateAsset で時間がかかる時に高速化できるかもしれない「AssetDatabase.StartAssetEditing」

概要 using UnityEditor; using UnityEngine; using Debug = UnityEngine.Debug; public class Example : AssetPostprocessor { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var count = 100; var shader = Shader.Find( "Sprites/Diffuse" );…

【Unity】SpriteAtlas と TexturePacker の比較メモ

インポート時間の比較 約1,000個のスプライトを直接 Unity プロジェクトに追加した場合と 事前に TexturePacker でアトラス化して Unity プロジェクトに追加した場合の インポート時間の比較 項目 インポート時間 非アトラス化 75秒 アトラス化 34秒 アトラ…

【Unity】Cache Server にすべてのアセットをアップロードするメニュー

概要 Unity メニューの「Assets > Cache Server > Upload All Assets」を押して 表示されたウィンドウで Cache Server の IP アドレスを入力して「Upload」を押す

【Unity】スプライトをアトラス化する前とした後の Build Report の差

はじめに Unity プロジェクトに 382.7 KB のスプライトを5つ追加して SpriteAtlas でパッキングしなかった場合とした場合で Build Report にどのように差が出るか アトラス化前 Textures 1.5 mb 9.1% 384.4 kb 0.8% Assets/Sprites/f005.png 384.4 kb 0.8% A…

【Unity】高速な xcodebuild

概要 # 通常の xcodebuild xcodebuild \ -project $PROJECT_PATH \ -scheme $SCHEME \ archive -archivePath $ARCHIVE_PATH \ PROVISIONING_PROFILE=$PROVISIONING_PROFILE # 高速な xcodebuild xcodebuild \ -project $PROJECT_PATH \ -scheme $SCHEME \ ar…

【Unity】MasterMemory の基本的な使い方

はじめに この記事では MasterMemory の基本的な使い方を紹介していきます 目次 はじめに 目次 検証環境 必要なファイルの入手 .unitypackage のインポート マスタを管理するクラスの準備 MasterMemory のジェネレータを実行 MessagePack のジェネレータを実…

【おすすめスライド】「今すぐ現場で覚えておきたい最適化技法 ~「ゲシュタルト・オーディン」開発における最適化事例~」

スライド

【Unity】空のゲームオブジェクトのプレハブのサイズは 1KB でデフォルトの Particle System のプレハブのサイズは 113KB

概要 項目 サイズ ファイル行数 空のゲームオブジェクトのプレハブ 1KB 32行 デフォルトの Cube プレハブ 3KB 94行 デフォルトの Particle System のプレハブ 113KB 4755行 ファイルの中身 空のゲームオブジェクトのプレハブ デフォルトの Particle System …

【Unity】CustomSampler を using で使用できるようにするクラス

ソースコード 使用例 通常 using UnityEngine; using UnityEngine.Profiling; public class Example : MonoBehaviour { private void Update() { var sampler = CustomSampler.Create( "AAAAA" ); sampler.Begin(); // ... sampler.End(); } } CustomSampler…

【Unity】物理演算を無効化する方法

概要 using UnityEngine; public class Example : MonoBehaviour { private void Update() { Physics.autoSimulation = false; Physics2D.autoSimulation = false; } } 物理演算を無効化する場合は 3D の場合は Physics.autoSimulation に false を、 2D の…

【Unity】簡単にオブジェクトプールを使用できる「Master Object Pooler 2」紹介

はじめに 「Master Object Pooler 2」を Unity プロジェクトに導入することで 簡単にオブジェクトプールを使用できるようになります 使い方 Project ビューの「Create > Master Object Pooler 2 > Object Pool」を選択して オブジェクトプールを管理するアセ…

【Unity】string.Format や StringBuilder、TextMesh Pro の割り当てを削減できる「ZString」紹介

はじめに 「ZString」を Uniy プロジェクトに導入することで string.Format や StringBuilder、TextMesh Pro の割り当てを削減できるようになります string.Format 通常 using UnityEngine; public class Example : MonoBehaviour { private void Update() {…

【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 において問題のあるコードに 警告の波線が表示されたり、ハイライト表示されるようになります この記事では、どのようなコードに警告の波線やハイライトが表示されるか紹介していきます 目次 はじめ…