コガネブログ

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

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

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

【Unity】チュートリアルなどで特定のボタンのみハイライトして、それ以外のボタンを押せなくすることができる「Unity UI强制引导框」紹介

はじめに 「Unity UI强制引导框」を Unity プロジェクトに導入することで チュートリアルなどで特定のボタンのみハイライトして、 それ以外のボタンを押せなくすることができるようになります 使用例 使い方 シーンのキャンバス内に「GuideMask」のオブジェ…

【Unity】Scene View のカメラの位置と角度をシーンのメインカメラに同期させるエディタ拡張

ソースコード 使い方 Unity メニューの「Edit > Scene View Camera Align」をオンにすると Scene View のカメラの位置と角度をシーンのメインカメラに同期させることができます

【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】static な event の登録数を取得する方法

概要 using System; using System.Reflection; public static class DelegateExt { public static int GetLength<T>( string name ) { return GetLength( typeof( T ), name ); } public static int GetLength( this Type self, string name ) { var attrs = Bi</t>…

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

概要

【Unity】ゲームオブジェクトのルートパスを取得できる拡張メソッド

ソースコード using UnityEngine; public static class GameObjectExt { private static string GetRootPath( this GameObject gameObject ) { var path = gameObject.name; var parent = gameObject.transform.parent; while ( parent != null ) { path = p…

【Unity】Inspector で参照が設定されていない項目が存在したらエディタを再生できなくするエディタ拡張

ソースコード 上記のスクリプトを Unity プロジェクトの 「Editor」フォルダに追加することで使用できます 使い方 using JetBrains.Annotations; using UnityEngine; public class Test : MonoBehaviour { [NotNull] public Sprite m_sprite; } 例えば NotNu…

【Unity】Unity エディタの Game ビューに iPhone X のセーフエリアを表示できる「iPhone X Safe Area Drawer」を GitHub に公開しました

はじめに Unity エディタの Game ビューに iPhone X のセーフエリアを表示できる 「iPhone X Safe Area Drawer」を GitHub に公開しました バージョン Unity 2018.3.9f1 使用例 使い方 「iPhoneXSafeAreaDrawerSettings」を選択して IsEnable をオンにすると…

【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() {…

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

スライド

【Unity】意図的に強制終了できる「UnityEngine.Diagnostics.Utils.ForceCrash」

概要 using UnityEngine; using UnityEngine.Diagnostics; public class Example : MonoBehaviour { private void Update() { if ( Input.GetKeyDown( KeyCode.Space ) ) { Utils.ForceCrash( ForcedCrashCategory.AccessViolation ); } } } UnityEngine.Dia…

【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】Unity Test Runner で実行できる汎用的なテストを 20 個以上まとめた「UniCommonTestRunner」を GitHub に公開しました

はじめに Unity Test Runner で実行できる汎用的なテストを 20 個以上まとめた 「UniCommonTestRunner」を GitHub に公開しました 目次 はじめに 目次 バージョン 使い方 実行できるテストの種類 加速度センサーが無効になっているか Android 用のプラグイン…

【Unity】横向きかつクリックやタップ可能なゲームで使用できるカスタマイズ可能なデバッグメニュー「UniDebugMenu」を GitHub に公開しました

はじめに 横向きかつクリックやタップ可能なゲームで使用できる カスタマイズ可能なデバッグメニュー「UniDebugMenu」を GitHub に公開しました 目次 はじめに 目次 機能 バージョン サンプル トップ画面 システム情報 システムコマンド ゲームオブジェクト…

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

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

【Unity】Hierarchy に存在するすべてのゲームオブジェクトを取得する方法

方法1 using System.Linq; using UnityEngine; ... var list = Resources .FindObjectsOfTypeAll<GameObject>() .Where( c => c.scene.isLoaded ) .Where( c => c.hideFlags == HideFlags.None ) ; こちらの方法の場合、すべてのゲームオブジェクトを取得できますが、 ゲ</gameobject>…

【Unity】Shift + Alt + C で Editor.log を開くエディタ拡張

ソースコード

【おすすめスライド】「【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計」

スライド

【Unity】指定したアセットに依存するすべてのアセットを取得できる「EditorUtility.CollectDependencies」

概要 EditorUtility.CollectDependencies を使用することで 指定したアセットに依存するすべてのアセットを配列で取得できます 例えば上記のような 3D モデルのプレハブに対して using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" …

【おすすめスライド】「Unityでパフォーマンスの良いUIを作る為のTips」

スライド

【Unity】ビルド時間を計測してログ出力するエディタ拡張

概要