コガネブログ

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

【Unity】ビルドしたゲームに含まれているアセットの情報をクリップボードにコピーするエディタ拡張(Windows)

ソースコード 使い方 ゲームをビルドした後に Unity メニューの「Tools>Copy Build Report」を選択すると Build Report Uncompressed usage by category: Textures 119.9 kb 0.3% Meshes 0.0 kb 0.0% Animations 0.0 kb 0.0% Sounds 5.3 mb 14.1% Shaders 0.…

【Unity】Project ビューでアセットが ROM やアセットバンドルに含まれているかどうか確認できる「SearchTools」紹介

はじめに 「SearchTools」を Unity プロジェクトに導入することで Project ビューでアセットが ROM やアセットバンドルに含まれているかどうか 確認できるようになります クイックスタート Unity メニューの「Window>Search Tools>Rom Include Viewer」を選…

【Unity】PolygonCollider2D や EdgeCollider2D の処理負荷を削減できる「Polygon Collider Simplification」紹介

はじめに 「Polygon Collider Simplification」を Unity プロジェクトに導入することで PolygonCollider2D や EdgeCollider2D の処理負荷を削減できるようになります 使い方 適用前 適用後 使い方 PolygonCollider2D の処理負荷を削減したい場合は 「Polygon…

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

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

【Unity】最適化に関する記事まとめ(45個)

はじめに このブログで紹介してきた最適化に関するオススメの記事を45件まとめました 目次 はじめに 目次 全般 iOS / Android スクリプト string Dictionary 列挙型 プロファイラ GC 検証 その他 uGUI ツール エディタ操作 スライド 全般 Unity におけるゲー…

【Unity】iOS アプリの容量を削減できる「Unity.iOS.OnDemand」紹介

はじめに 「Unity.iOS.OnDemand」を Unity プロジェクトに導入することで iOS アプリの容量を削減できます 使い方 上記のページで紹介されています 関連記事

【Unity】アプリに含まれているアセットは Console ウィンドウを右クリックして「Open Editor Log」から確認できる

概要 Console ウィンドウを右クリックして「Open Editor Log」を選択して 「Build Report」や「uncompressed size」などで検索すると アプリに含まれているアセットの容量や一覧が確認できます 関連記事

【Unity】メッシュの頂点を設定する時は Mesh.vertices ではなく Mesh.SetVertices を使用することで GC Alloc の発生を防ぐことができる

Mesh.vertices using UnityEngine; public class Example : MonoBehaviour { private Mesh mesh; private void Awake() { mesh = new Mesh(); } private void Update() { mesh.vertices = new [] { new Vector3( 0, 1 ), new Vector3( 1, -1 ), new Vector3(…

【Unity】アプリに含まれるアセットを圧縮する設定

検証環境 Unity 2017.3.0f3 概要 Build Settings の「Compression Method」を設定することで アプリに含まれるアセットを圧縮することができます BuildPipeline.BuildPlayer ( EditorBuildSettings.scenes, "app.apk", BuildTarget.Android, BuildOptions.Co…

【Unity】Action デリゲートは 104B の GC Alloc が発生するが、インターフェイスであれば発生しない

概要 Action デリゲートはとても便利ですが、104B の GC Alloc が発生します もしも Action デリゲートを Update 関数などで頻繁に呼び出す場合は インターフェイスに置き換えることで GC Alloc の発生を防ぐことができます Action デリゲート using System;…

【Unity】列挙型を数値型に変換する時のメモリ割り当てを抑える「FastEnumConvert」紹介

ソースコード 使い方 var result1 = Convert.ToInt32( value ); // 40 byte のメモリ割り当て var result2 = FastEnumConvert.ToInt32( value ); // メモリ割り当てなし 関連記事

【Unity】Profiler.BeginSample、EndSample を using ステートで記述できるようにする「ScopedProfiler.cs」紹介

ソースコード 使用前 Profiler.BeginSample( "ピカチュウ" ); // ... Profiler.EndSample(); 使用後 using ( new ScopedProfiler( "ピカチュウ" ) ) { // ... } 関連記事

【Unity】メモリリークを見つけるために static フィールドがどのくらいメモリを保持しているか調査するツール「UnityHeapDump」紹介

はじめに 「UnityHeapDump」はメモリをテキストファイルにダンプするツールです 概要(引用) 主な用途は、メモリリークを見つけるために、 static フィールドがどのくらいのメモリを保持しているかを調査することです Unity アセットののリークについては、…

【Unity】string や StringBuilder よりもメモリ割り当てが少なく高速な文字列クラス「FastString」紹介

はじめに 「FastString」は string や StringBuilder よりも メモリ割り当てが少なく高速な文字列クラスです パフォーマンス比較 検証スクリプト using UnityEngine; using UnityEngine.Profiling; public class FastStringTest : MonoBehaviour { private F…

【Unity】iOS / Android で使用メモリを確認できる「MemoryChecker-Unity」紹介

はじめに 「MemoryChecker-Unity」を Unity プロジェクトに導入することで iOS / Android で使用メモリを確認できるようになります 使い方 using UnityEngine; public class Example : MonoBehaviour { #if UNITY_IOS [DllImport("__Internal")] private sta…

【Unity】iOS の IL2CPP ビルド時に不要な属性を除外してアプリの容量を減らすことができる「Unity3D.UselessAttributeStripper」紹介

はじめに 「Unity3D.UselessAttributeStripper」を使用することで iOS の IL2CPP ビルド時に不要な属性を除外して アプリの容量を減らすことができるようになります Unity プロジェクトによっては 18MB もの容量を減らすことも可能です 使い方 ツールの入手 …

【Unity】GC の発生を抑える ~文字列の操作編~

概要 m_spriteName = "coin_" + index.ToString(); スプライト名を変更してセルアニメーションさせる処理を Update 関数に記述したところ、 毎フレーム 66B の GC Alloc が発生して ときどきゲームがカクつく状態になった 下記ように配列を使用する書き方に…

【Unity】GC の発生を抑える ~リストの操作編~

概要 var list = activeThings.FindAll( c => !c.IsEnable ); list.ForEach( c => Destroy( c.gameObject ) ); activeThings.RemoveAll( c => !c.IsEnable ); 無効になったオブジェクトを Destroy して リストから削除する処理を LateUpdate 関数に記述した…

【Unity】iOS においてアプリがクラッシュした時の情報を取得できるクラス「CrashReport」紹介

使用例 取得可能なクラッシュレポートをすべて表示するサンプル using UnityEngine; public class Example : MonoBehaviour { private void OnGUI() { var reports = CrashReport.reports; GUILayout.Label( "Crash reports:" ); foreach ( var r in reports…

【Unity】iOS / Android においてアプリの起動時間を測ることができる「UnityInitializeTimeChecker」紹介

はじめに 「UnityInitializeTimeChecker」を Unity プロジェクトに導入することで iOS / Android においてアプリの起動時間を測ることができるようになります 使い方(引用) 「UnityInitializeTimeChecker.unitypackage」を Unity プロジェクトにインポート…

【Unity】ボタン以外の UI の raycastTarget をデフォルトで false にするエディタ拡張「GraphicDefaultValueWriter」紹介

はじめに http://dev.twsiyuan.com/2016/07/unity-graphic-raycasttarget-default-value.html 上記のサイト様が公開されている 「GraphicDefaultValueWriter」を Unity プロジェクトに導入すると ボタン以外の UI の raycastTarget をデフォルトで false に…

【Unity】string の連結を StringBuilder に置き換えてパフォーマンスを改善できる「StringBuilderTemporary」紹介

はじめに 「StringBuilderTemporary」を Unity プロジェクトに導入することで string の連結を StringBuilder に置き換えて パフォーマンスを改善することができます 使い方 using StrOpe = StringOperationUtil.OptimizedStringOperation; string の連結を …

【Unity】iOS や Android で端末のメモリが不足してきた時に呼び出されるコールバック「Application.lowMemory」紹介

使用例 using System.Collections.Generic; using UnityEngine; public class Example : MonoBehaviour { private readonly List<Texture2D> m_textures = new List<Texture2D>(); private void Awake() { Application.lowMemory += OnLowMemory; } private void Update() { // 毎</texture2d></texture2d>…

【Unity】string.StartsWith と string.EndsWith は処理速度が遅いので最適化した拡張メソッドを自作する

ソースコード 上記の CustomStartsWith 関数と CustomEndsWith 関数を string.StartsWith と string.EndsWith の代わりに使用します 速度比較 検証環境 Unity 2017.1.1f1 検証用スクリプト using UnityEngine; public sealed class Example : MonoBehaviour …

【Unity】高速かつボックス化が発生しない Dictionary「BetterDictionary」紹介

はじめに こちらの「BetterDictionary」は通常の Dictionary よりも高速で、 かつ、ボックス化の発生を防ぐことができます 以下、GitHub の README の引用になります 概要(引用) BetterDictionary クラスは System.Collections.Generic.Dictionary クラス…

【Unity】Unity におけるゲーム開発でガベージコレクションを最適化する(翻訳)

はじめに この記事は Unity 公式で紹介されている パフォーマンス改善に関する記事の一部翻訳になります キャッシング void OnTriggerEnter( Collider other ) { var allRenderers = FindObjectsOfType<Renderer>(); ExampleFunction( allRenderers ); } 上記の例では</renderer>…

【Unity】高速かつメモリを節約してスクロールビューを実装できる「EnhancedScroller」紹介($21.60)

概要 2015/5/28 に、uGUI 拡張用のアセット 「EnhancedScroller」がリリースされました 例えばスマホゲームで、プレゼントボックスやランキング一覧などの画面で 数百から数千件のデータをスクロールビューで表示する場合、 ベタに実装しようとするとオブジ…

【Unity】gzip で文字列を圧縮してデータ容量を抑える

スクリプト 使い方 using UnityEngine; public class Example : MonoBehaviour { private void Awake() { var rawData = "ピカチュウ"; var compressedData = GZipCompressor.Compress( rawData ); var result = GZipCompressor.Decompress( compressedData …

【Unity】デリゲートを指定する時に関数名ではなくラムダ式を使用することで GC の発生を抑える

検証用スクリプト using System; class Program { static void Main() { int count = 100000000; //======================================== // 関数名指定 //======================================== for ( int i = 0; i < count; i++ ) { Func( Callba…

【Unity】JsonUtility を使用して出力する Json ファイルの容量を少しでも減らす

概要 [Serializable] public class Character { public int m_id ; public string m_name ; } ... var ch = new Character(); var json = JsonUtility.ToJson( ch, true ); { "m_id": 0, "m_name": "" } 例えばこのような処理で出力したJSONを テキストファ…