コガネブログ

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

【Unity】SpriteAtlas.GetSprite はスプライトの参照を返すのではなく複製するのでメモリに注意

概要 using UnityEngine; using UnityEngine.U2D; public class Example : MonoBehaviour { public SpriteAtlas m_atlas; private void Update() { m_atlas.GetSprite( "goal_01" ); } } 例えば上記のように Update 関数で毎フレーム SpriteAtlas.GetSprite …

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

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

【Unity】アプリのビルドにかかった時間を調べる方法

概要 Unity の Console ウィンドウを右クリックして「Open Editor Log」を選択する もしくは C:\Users\【ユーザー名】\AppData\Local\Unity\Editor\Editor.log を開く 下記のようなテキストを検索する *** Completed 'Build.Player.AndroidPlayer' in 55 sec…

【Unity】Android プラットフォームで Internal ビルドした場合と Gradle ビルドした場合でビルド時間にどれくらい差があるか

検証環境 Windows 7 Unity 2018.2.7f1 ビルド時間 Internal:55 秒 Gradle:60 秒

【Unity】ゲーム画面に FPS、メモリ、オーディオ、デバイスの情報を表示できる「Graphy」紹介

はじめに 「Graphy」を Unity プロジェクトに導入することで ゲーム画面に FPS、メモリ、オーディオ、デバイスの情報を表示できるようになります 使用例 使い方 「[Graphy]」プレハブをシーンに配置します 設定できる項目はこのようになっています

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

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

【Unity】キャラの立ち絵の画像のようにデザインが重複する画像の容量を削減できる「SpriteDicing」紹介

はじめに 「SpriteDicing」を Unity プロジェクトに導入することで キャラの立ち絵の画像のようにデザインが重複する画像の容量を 削減できるようになります 使用例 例えば、上記のような Unity ちゃんの立ち絵は、表情しか違いがありません しかし、これら…

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

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

【Unity】System.Action よりも高速かつ GC の発生を抑えたイベントシステム「Relay」紹介

はじめに 「Relay」は System.Action よりも高速かつ GC Alloc の発生を抑えたイベントシステムです 検証環境 Unity 2017.4.1.f1 検証用スクリプト 検証結果 リスナーの追加や削除、イベントの実行を 1000000 回行った結果 かかった時間(秒) GC の発生回数…

【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 に…