コガネブログ

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

【Unity】モバイルでも高速に動作するブルームのポストエフェクトが使用できる「Fast Bloom optimized for Mobile」紹介($4.99)

はじめに 「Fast Bloom optimized for Mobile」を Unity プロジェクトに導入することで モバイルでも高速に動作するブルームのポストエフェクトが 使用できるようになります 使用例 適用前 適用後 使い方 シーンのカメラに「Mobile Bloom」をアタッチして 「…

【Unity】モバイルでも高速に動作するブルーム、カラーコレクション、グレーディング、ビネットなどのポストエフェクトが使用できる「Sleek Render: Mobile Post Processing Stack」紹介($19)

はじめに 「Sleek Render: Mobile Post Processing Stack」を Unity プロジェクトに導入することで モバイルでも高速に動作するブルーム、カラーコレクション、 グレーディング、ビネットなどのポストエフェクトが使用できるようになります 使用例 適用前 ブ…

【Unity】改訂版のモバイル向けの加算シェーダ「Mobile-Particle-Add-Revised.shader」紹介

使用例 適用前 適用後 スクリプト 使い方 マテリアルの Shader を「Custom/Mobile/Particles/Additive」に変更すると使用できます

【Unity】モバイル向けに設計された Standard Shader を使用できる「Standard Shader (Mobile)」紹介

はじめに 「Standard Shader (Mobile)」を Unity プロジェクトに導入することで モバイル向けに設計された Standard Shader を使用できるようになります 使い方 マテリアルの Shader を「Mobile/Standard」に変更することで 使用できるようになります

【Unity】要素を使い回すスクロールを実装できる「Scroll - Mutate - Infinity - ZenUI」紹介

はじめに 「Scroll - Mutate - Infinity - ZenUI」を Unity プロジェクトに導入することで 要素を使い回すスクロールを実装できるようになります 目次 はじめに 目次 使用例 特徴 基本的な使い方 スクリプトの作成 シーンのオブジェクトの作成 要素の追加、…

【おすすめスライド】「【Unite Tokyo 2018】カスタムシェーダーでモバイルでも最先端グラフィックスな格闘ゲームを!」

スライド

【Unity】コンポーネントをアタッチするだけでアウトラインシェーダが使用できる「Outline Effect But It's Faster」紹介

はじめに 「Outline Effect But It's Faster」を Unity プロジェクトに導入することで コンポーネントをアタッチするだけでアウトラインシェーダが使用できるようになります 使用例 適用前 適用後 使い方 シーンのカメラに「Outline Effect」をアタッチしま…

【Unity】デリゲートだと 112B の GC Alloc が発生するがローカル関数だと GC Alloc が発生しない

概要 using System; using UnityEngine; using UnityEngine.Profiling; public class Test : MonoBehaviour { private void Update() { var samplerA = CustomSampler.Create( "TEST A" ); samplerA.Begin(); Func<int, int> funcA = n => n + 1; funcA( 25 ); sampler</int,>…

【Unity】Post Processing Stack v2 で Bloom を使用した場合と自作した Bloom を使用した場合の Android 実機での FPS の違い(自分用メモ)

検証環境 Unity 2018.3.11f1 Post Processing 2.1.6 P10 lite 検証結果 Bloom 無し Post Processing Stack v2 の Bloom 自作した Bloom 補足 「自作した Bloom」の検証には下記のシェーダを使用させていただきました

【Unity】「Shader Graph Example Library」のサンプルシーンを Android で実行した場合の FPS(自分用メモ)

概要 「Shader Graph Example Library」のサンプルシーンを Android で実行した場合に FPS がどうなるか気になったので調査してみました (時間をかけて検証したわけではないので、あくまで参考程度のモノになります) 検証環境 Unity 2018.3.11f1 Lightweig…

【Unity】ハードエッジの 3D モデルでもキレイに表示できて、隠れている部分も表示できるアウトラインシェーダ「Facepunch.Highlight」紹介

はじめに 「Facepunch.Highlight」はハードエッジの 3D モデルでもキレイに表示できて、 隠れている部分も表示できるアウトラインシェーダです 使用例(引用) 使用例 適用前 適用後 使い方 「HighlightImageEffect」マテリアルでアウトラインのサイズや色を…

【Unity】クラスと構造体それぞれのインスタンスを object 型にキャストした時の GC Alloc の違い

クラス using UnityEngine; public class Example : MonoBehaviour { private class Hoge { } private Hoge hoge = new Hoge(); private void Update() { object obj = hoge; Hoge hoge2 = ( Hoge )obj; } } クラスの場合は GC Alloc は発生しない 構造体 us…

【Unity】クラスと構造体それぞれのインスタンスを生成した時の GC Alloc の違い

概要 using UnityEngine; using UnityEngine.Profiling; public class Example : MonoBehaviour { public class Hoge { } public struct Fuga { } private void Start() { var count = 1000000; var samplerA = CustomSampler.Create( "AAAAAAAAAAAAAAAAAAAA…

【Unity】Hierarchy に uGUI の raycastTarget を変更するチェックボックスを表示するエディタ拡張

概要

【Unity】Unity プロジェクトに存在するすべてのマテリアルやシェーダの Render Queue を一覧で表示できる「Render Queue Unity Extension」紹介

はじめに 「Render Queue Unity Extension」を Unity プロジェクトに導入することで Unity プロジェクトに存在するすべてのマテリアルやシェーダの Render Queue を一覧で表示できるようになります 使用例 Unity メニューの「Tools > Render Queue」を選択す…

【Unity】static 変数、Hierarchy のオブジェクト、プレハブ、ScriptableObject などがどのくらいヒープ領域を使用しているか内訳を見ることができる「Unity Heap Crawler」紹介

はじめに 「Unity Heap Crawler」を Unity プロジェクトに導入することで static 変数、Hierarchy のオブジェクト、プレハブ、ScriptableObject などが どのくらいヒープ領域を使用しているか内訳を見ることができます 使い方 Unity エディタ再生中にメニュ…

【Unity】アセットバンドル化するアセットがアプリに内包するアセットから参照されていないか確認できる「AssetReferenceFinder」紹介

はじめに 「UnitySamples」リポジトリに含まれている 「AssetReferenceFinder.cs」を使用することで アセットバンドル化するアセットが アプリに内包するアセットから参照されていないか確認できます 使用例 例えば、アセットバンドル化するアセットが含まれ…

【Unity】任意のコードの実行時間や GC Alloc を測定して Profiler に表示できる「CustomSampler」

概要 using UnityEngine; using UnityEngine.Profiling; public class Example : MonoBehaviour { private void Start() { var sampler = CustomSampler.Create( "Pokemon" ); sampler.Begin(); for ( int i = 0; i < 10000; i++ ) { Debug.Log( "あああああ…

【Unity】TexturePacker でパッキングしたテクスチャを SpriteRenderer や uGUI の Image で使用する

はじめに TexturePacker でパッキングしたテクスチャは SpriteRenderer や uGUI の Image で使用することができます 検証環境 Unity 2018.3.7f1 TexturePacker 4.12.1 準備 上記サイトから TexturePacker をインストールします また、 「TexturePacker Impor…

【Unity】指定した Unity のオブジェクトやアセットのメモリ使用量を取得できる「Profiler.GetRuntimeMemorySizeLong」

概要 例えば、上記のように3個のテクスチャを描画するシーンを Android にビルドして using System.Linq; using System.Text; using TMPro; using UnityEngine; using UnityEngine.Profiling; public class Example : MonoBehaviour { public TMP_Text m_tex…

【Unity】Unity が確保したメモリの使用状況(Unity の使用メモリ)を取得するスクリプト

ソースコード 使用例 using System.Text; using TMPro; using UnityEngine; public class Example : MonoBehaviour { public TMP_Text m_text; private readonly UnityMemoryChecker m_unityMemoryChecker = new UnityMemoryChecker(); private void Update(…

【Unity】Managed Memory の使用状況(Mono の使用メモリ)を取得するスクリプト

ソースコード 使用例 using System.Text; using TMPro; using UnityEngine; public class Example : MonoBehaviour { public TMP_Text m_text; private readonly MonoMemoryChecker m_monoMemoryChecker = new MonoMemoryChecker(); private void Update() {…

【Unity】実機で読み込まれているマテリアルの一覧を取得する方法

概要 using System.Linq; using System.Text; using UnityEngine; public class Example : MonoBehaviour { private void Awake() { var list = Resources .FindObjectsOfTypeAll<Material>() .Where( c => ( c.hideFlags & HideFlags.NotEditable ) == 0 ) .Where( c </material>…

【Unity】実機で読み込まれているテクスチャの一覧を取得する方法

概要 using System.Linq; using System.Text; using UnityEngine; public class Example : MonoBehaviour { private void Awake() { var list = Resources .FindObjectsOfTypeAll<Texture2D>() .Where( c => ( c.hideFlags & HideFlags.NotEditable ) == 0 ) .Where( c </texture2d>…

【おすすめスライド】「【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術」

スライド

【Unity】GC が何回発生したか計測する自作クラス

ソースコード 使用例 using UnityEngine; public class Example : MonoBehaviour { private void Awake() { var watcher = new GCWatcher(); watcher.Start(); for ( int i = 0; i < 10000; i++ ) { Debug.Log( "【計測したい処理】" ); } watcher.Stop(); D…

【Unity】GC が発生したかどうかをイベントで検知できる独自クラス

ソースコード 使用例 using UnityEngine; public class Example : MonoBehaviour { private void Awake() { GCEvent.Initialize(); GCEvent.mOnCollect += OnCollect; } private void OnDestroy() { GCEvent.mOnCollect -= OnCollect; } private void OnColl…

【Unity】uGUI で Canvas Renderer の「Cull Transparent Mesh」をオンにすると透明なオブジェクトの描画をスキップできる

概要 例えば uGUI で透明な Image をシーンに配置した場合 画面には何も表示されないですが Overdraw を見てみると、うっすら赤くなっており 描画の処理は走ってしまっていることがわかります (透明な Image を10個重ねてみるとこのようにわかりやすくなり…

【Unity】Unity 2019.2.0a6 新機能 シーン遷移にかかった時間の内訳を Editor.log で閲覧できるようになった

概要 Console ウィンドウを右クリックして 「Open Editor Log」を選択した時に表示される Editor.log で LightmapEditorSettings: switching bake backend from 1 to 0. Unloading 26 Unused Serialized files (Serialized files now loaded: 0) UnloadTime:…

【Unity】モバイルにおけるテクスチャの最大サイズ(2017年9月)

概要 2017年9月時点でほとんどのモバイル端末が 4096 x 4096 のテクスチャをサポートしているらしい iOS:iPhone 4S 以降、iPad 2 以降でサポートされている Android:98.4 % の端末でサポートされている