コガネブログ

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

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

スライド 参考サイト様

【Android】実機で画面タップのモンキーテストを行う方法

概要 adb shell monkey -v -p 【パッケージ名】 --pct-touch 100 【タップ回数】 Windows PC に Android 端末を接続した状態で、 上記のコマンドをコマンドプロンプトから実行することで 実機で画面タップのモンキーテストを行うことができます adb shell ki…

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

概要

【Unity】不正な値が設定されていないかどうかを確認できる「Sanity Checker for Unity」紹介

はじめに 「Sanity Checker for Unity」を Unity プロジェクトに導入することで 不正な値が設定されていないかどうかを確認できるようになります 使い方 using System; using JetBrains.Annotations; using Skaillz.SanityChecker.Attributes; using UnityEn…

【Unity】シーンやプレハブの静的解析を行うことができる「Mooble」紹介

はじめに 「Mooble」を Unity プロジェクトに導入することで シーンやプレハブの静的解析を行うことができるようになります 使い方 Unity メニューの「Mooble>Static Analysis」から シーンとプレハブどちらの静的解析を行うのかを選択します すると「Mooble…

【Unity】Mono Heap が大きいほど GC に時間がかかる(メモ)

【Unity】Dictionary のキーに列挙型を使用すると Android の IL2CPP ビルドの時間・APK ファイルのサイズがどのくらい増えるか検証してみた

はじめに Dictionary のキーに int を使用した場合と列挙型を使用した場合で Android の IL2CPP ビルドの時間がどのくらい増えるか、 生成される APK ファイルのサイズがどのくらい増えるかを検証してみました 検証環境 Windows 10(SSD) Unity 2018.2.14f1…

【Unity】【UnityUIExtention】uGUI でボタンの当たり判定を広げる

はじめに 「UnityUIExtention」を Unity プロジェクトに導入することで uGUI でボタンの当たり判定を広げることができるようになります 使用例 使い方 Button オブジェクトに「UICollider」がアタッチされた子オブジェクトを追加します すると、そのオブジェ…

【Unity】Visual Studio や Rider 上でプラットフォームを切り替えてコードの確認ができる「Unity-SlnGen」紹介

はじめに 「Unity-SlnGen」を Unity プロジェクトに導入することで Visual Studio や Rider 上でプラットフォームを切り替えて コードの確認ができるようになります 使用例 インストール手順 https://github.com/jhett12321/Unity-Slngen/releases 上記のペ…

【Unity】Unity 2018.3.0b 新機能「Managed Stripping Level」すべてのプラットフォームでコードサイズを縮小できる

概要 Unity 2018.3.0b において「Managed Stripping Level」が追加されました この機能を使用することで、すべてのプラットフォームで コードサイズを縮小できるようになります Unity メニューの「File>Build Settings...」から「Player Settings...」を選択…

【おすすめスライド】「【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術」

スライド

【Unity】Android プラットフォームで Compression Method を「Default」にした場合と「LZ4」にした場合でアプリの起動時間にどれくらい差があるか

検証環境 Windows 7 Unity 2018.2.7f1 起動時間 Default:1.829 秒 LZ4:1.688 秒 参考サイト様

【Unity】現在のシーンが参照しているテクスチャやマテリアルを一覧で確認できる「Unity Resource Checker」紹介

はじめに 「Unity Resource Checker」を Unity プロジェクトに導入することで 現在のシーンが参照しているテクスチャやマテリアルを 一覧で確認できるようになります 使い方 Unity メニューの「Windows>Resource Checker」を選択します すると、現在のシーン…

【Unity】TextMesh Pro で数値を表示する時に GC Alloc の発生を防ぐことができる「TMProNonAllocUtil」紹介

はじめに 「TMProNonAllocUtil」を Unity プロジェクトに導入することで TextMesh Pro で数値を表示する時に GC Alloc の発生を防ぐことができるようになります 通常 using TMPro; using UnityEngine; public class Example : MonoBehaviour { public TextMe…

【Unity】意図的に Unity を強制終了する「Application.ForceCrash」

Unity 2018 以降の場合 UnityEngine.Diagnostics.Utils.ForceCrash を使用します 概要 using UnityEngine; public class Example : MonoBehaviour { private void Awake() { Application.ForceCrash( 0 ); } } Application.ForceCrash を使用することで、意…

【Unity】コンパイル時間を確認できるエディタ拡張「compile-time-tracker」紹介

はじめに 「compile-time-tracker」は コンパイル時間を確認できるエディタ拡張です 使い方 Unity メニューの「Window>Compile Time Tracker Window」を選択します 表示された「Compile Timer」ウィンドウでコンパイル時間を確認できます 関連記事