コガネブログ

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

【Unity】マルチプロセスでアセットバンドルをビルドできるようになりビルド時間を削減できる「Unity-MultiProcess-BuildPipeline」紹介

はじめに 「Unity-MultiProcess-BuildPipeline」を Unity プロジェクトに導入することで マルチプロセスでアセットバンドルをビルドできるようになり ビルド時間を削減できるようになります 使い方 using System.Collections.Generic; using UnityEditor; pu…

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

【Unity】Unity 2018.3 におけるコンパイル時間を検証してみた

概要 Unity 2018.3 におけるコンパイル時間が少し気になったので、 手元にある Unity プロジェクトをいくつかの Unity バージョンで開き、 それぞれのバージョンでコンパイルにどのくらい時間がかかるか比較してみました 検証環境 Windows 10(SSD) Unity 5…

【Unity】新しい Memory Profiler のパッケージが利用可能になった(現在はプレビュー版)

はじめに https://forum.unity.com/threads/new-memory-profiler-preview-package-available-for-unity-2018-3.597271/ 新しい Memory Profiler のパッケージが利用可能になりました 2018/12/14 現在はプレビュー版となっております 導入方法 2018/12/14 現…

【Unity】Unity 2018.3 新機能 ガベージコレクションを無効化できる API が追加された

はじめに Unity 2018.3 からガベージコレクションを無効化できる API が追加されました 使い方 UnityEngine.Scripting 名前空間に存在する GarbageCollector クラスを使用します using UnityEngine.Scripting; ... // ガベージコレクションを有効化 GarbageC…

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

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

【Unity】IL2CPP のビルド時間を最適化する方法が公式ドキュメントに記載されていたのでメモ

概要 上記の公式ドキュメントで IL2CPP のビルド時間を最適化する方法が紹介されていたため 備忘録として書き残しておきます インクリメンタルビルドを使用する iOS の場合は Build Settings で Build を選択した後に Replace ではなく Append を使用する Pl…

【Unity】Unity 2019.1.0a8 新機能 GC スパイクを避けられる Incremental Garbage Collection が使用できるようになった

概要 Unity メニューの「Edit>Project Settings...」の「Player」タブから 「Use incremental GC (Experimental)」をオンにすることで GC スパイクを避けることができる Incremental Garbage Collection が使用できるようになります

【Unity】UI の最適化についてまとめられている公式ドキュメント

概要

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

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

【Unity】非同期読み込みの優先順位を設定できる「AsyncOperation.priority」

概要 var operation = SceneManager.LoadSceneAsync( "Hoge" ); operation.priority = 10; 複数の非同期操作がキューに存在する場合、 優先順位が高いものが最初に実行されます すでに開始した処理は、優先順位を変更しても反映されないため注意が必要です

【Unity】データをバックグラウンドで読み込む時に 1 フレーム内で使える最大時間を変更できる「Application.backgroundLoadingPriority」

概要 https://docs.unity3d.com/ScriptReference/Application-backgroundLoadingPriority.html Application.backgroundLoadingPriority を使用することで Resources.LoadAsync AssetBundle.LoadAssetAsync AssetBundle.LoadAllAssetAsync SceneManager.LoadS…

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

スライド

【おすすめスライド】「C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?」

スライド

【Unity】yield return 0 を使用すると 20B の GC Alloc が発生する

概要 using System.Collections; using UnityEngine; public class Example : MonoBehaviour { private IEnumerator Start() { while ( true ) { yield return 0; } } } yield return null なら GC Alloc は発生しない 検証環境 Unity 2017.4.7f1

【Unity】UnityEngine.Object.name にアクセスすると 46B の GC Alloc が発生する

概要 using UnityEngine; public class Example : MonoBehaviour { private void Update() { var name = gameObject.name; } } 検証環境 Unity 2017.4.7f1

【Unity】GameObject.tag にアクセスすると 42B の GC Alloc が発生する

概要 using UnityEngine; public class Example : MonoBehaviour { private void Update() { var tag = gameObject.tag; } } 検証環境 Unity 2017.4.7f1

【Unity】GC Alloc を減らす方法まとめ(自分用)

記事 Action デリゲートは 104B の GC Alloc が発生するが、インターフェイスであれば発生しない デリゲートを指定する時に関数名ではなくラムダ式を使用することで GC の発生を抑える 高速かつボックス化が発生しない Dictionary「BetterDictionary」紹介 D…

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