コガネブログ

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

2022-01-01から1ヶ月間の記事一覧

【Unity】Addressables の UpdateCatalogs で通信環境が悪いなどの理由でリモートカタログのダウンロードに失敗した場合内部で NullReferenceException が発生する

概要 protected override async void Execute() { Exception exception = null; var result = await System.Threading.Tasks.Task.Run ( () => { try { var catalogs = new List<IResourceLocator>( m_DepOp.Result.Count ); for ( int i = 0; i < m_DepOp.Result.Count; i++ )</iresourcelocator>…

【Unity】WorkerState(Connecting), ImporterState(Initializing) worker timed out connecting with editor

概要 Unity プロジェクトの起動が完了しない現象に遭遇した WorkerState(Connecting), ImporterState(Initializing) worker timed out connecting with editor Editor.log を見たところ上記のログが連続で出力されていた 一度、Project Settings で「Paralle…

【Unity】Input System でデバイスの接続切断を検知する方法

概要 using System; using UnityEngine; using UnityEngine.InputSystem; public class Example : MonoBehaviour { private void Awake() { InputSystem.onDeviceChange += ( device, change ) => { Debug.Log( $"[onDeviceChange] {device}, {change}" ); s…

【Unity】Unity 2021.2 から MonoBehaviour や ScriptableObject に簡単にアイコンを設定できる

概要 using UnityEngine; [Icon( "Assets/Icons/animal_inu.png" )] public class Example : MonoBehaviour { } Unity 2021.2 から IconAttribute を使うことで MonoBehaviour や ScriptableObject に簡単にアイコンを設定できるようになった

【Unity】Unity 2021.2 から Inspector で参照を設定する時に Object Picker ではなく Unity Search を使用できる

通常 using UnityEngine; public class Example : MonoBehaviour { public Object m_target; } SearchContext using UnityEngine; using UnityEngine.Search; public class Example : MonoBehaviour { [SearchContext( "" )] public Object m_target; } Sear…

【Unity】指定した範囲内の処理でどのくらい GC Alloc が発生したかログ出力するクラス

ソースコード using System; using Unity.Profiling; using UnityEngine; public sealed class CheckGCAllocScope : IDisposable { #if ENABLE_RELEASE public void Dispose() { } public static CheckGCAllocScope Create( string name ) { return default;…

【Unity】TextMesh Pro の Font Asset Creator の Packing Method が Fast と Optimize でどのくらい時間に差が出るか

はじめに TextMesh Pro の Font Asset Creator の Packing Method を Fast にした場合と Optimize にした場合でどのくらい時間に差が出るか検証 Font Asset 生成時の各種設定は上記の通り 検証に使用されていただいたフォントは上記サイト様で紹介されている…

【Unity】TextMesh Pro の Font Asset Creator で Auto Sizing ではなく Custom Size を使うと Generate が速くなる

検証内容 「ラノベPOPフォント」で日本語を含む TextMesh Pro のフォントを作成する場合、 Sampling Point Size を「Auto Sizing」にした場合と「Custom Size」にした場合で Font の Generate が完了するまでにどのくらい時間の差が出るか検証 検証環境 Wind…

【Unity】EditorGUILayout.TextArea で範囲内に収まりきらない文字を自動改行する方法

概要 using UnityEditor; using UnityEngine; public sealed class Example : EditorWindow { private string m_text; [MenuItem( "Tools/Open" )] private static void Open() { GetWindow<Example>(); } private void OnGUI() { var style = new GUIStyle( EditorSt</example>…

【Unity】Steam 向けのゲームで .exe を直接起動できないようにする方法

概要 Steamworks.NET の SteamManager を使用している場合は SteamManager クラスの Awake 関数内で SteamAPI.RestartAppIfNecessary を呼び出している箇所で if (SteamAPI.RestartAppIfNecessary((AppId_t)1234567890)) { 適切な App ID を渡します これで…

【雑記】.exe のプロパティの詳細を設定する方法

はじめに .exe を右クリックして「プロパティ > 詳細」を選択した時に表示される情報を 変更する方法を紹介していきます 目次 はじめに 目次 GoRC.exe の入手 Resource Hacker の入手 resources.rc の作成 resources.res の作成 script.txt の作成 .exe のプ…

【Unity】The character used for Underline is not available in font asset [XXXX].

概要 The character used for Underline is not available in font asset [XXXX]. TextMesh Pro のフォントに必要な文字をすべて登録しているはずなのに TextMesh Pro を表示する時に上記の警告が出る場合は ()_ 上記の文字をフォントに登録すると警告が消え…

【Unity】クラスや構造体を引数に渡す時の速さを比較

検証内容 100 個の string 型のフィールドを持つ 1 億個の クラスのインスタンスを引数に渡す場合 構造体のインスタンスを引数に渡す場合 構造体のインスタンスを参照引数(ref)に渡す場合 構造体のインスタンスを入力参照引数(in)に渡す場合 の速度を比…

【Unity】Unity 2021.2 の Input System で iOS において WebGL で加速度を取得する方法

概要 Unity プロジェクトに Input System パッケージをインストールして Project Settings の「Input System Package」のページで 「Supported Devices」に「Accelerometer」を追加して using TMPro; using UnityEngine; using UnityEngine.InputSystem; pub…

【Unity】Unity 2021.2 で System.Text.Json を使えるようにする方法

概要 https://www.nuget.org/packages/Microsoft.Bcl.AsyncInterfaces/ https://www.nuget.org/packages/System.Runtime.CompilerServices.Unsafe/ https://www.nuget.org/packages/System.Text.Encodings.Web https://www.nuget.org/packages/System.Text.J…

【Unity】アセットバンドルを並列ビルドするとどのくらい高速化できるか

検証内容 アセットバンドルが約 3,700 個存在する Unity プロジェクトで検証 検証環境 Windows 10 Unity 2020.3.25f1 クリーンビルドした場合 項目 アセットバンドルのビルドにかかった時間 通常 16分24秒 並列ビルド(スレーブ 2 個) 12分39秒 並列ビルド…

【Unity】Unable to add the requested character to font asset [XXXX]'s atlas texture. Please make the texture [XXXX] readable.

概要 Unable to add the requested character to font asset [XXXX]'s atlas texture. Please make the texture [XXXX] readable. TextMesh Pro でダイナミックフォントを使用している時に上記の警告が出る場合は Project ウィンドウでダイナミックフォント…

【Unity】AssetBundleBrowser: Bundle name 'XXXX' contains a period

概要 AssetBundleBrowser: Bundle name 'XXXX' contains a period. Internally Unity keeps 'bundleName' and 'variantName' separate, but externally treat them as 'bundleName.variantName'. If a bundleName contains a period, the build will (probab…

【Unity】Unity 2021.2 からLINQ で ToHashSet・SkipLast・TakeLast が標準で使えるようになった

概要 Unity 2021.2 から LINQ で ToHashSet・SkipLast・TakeLast が標準で使えるようになった (もしかしたら Unity 2021.1 から使えるかも?) using System.Linq; using UnityEngine; public class Example : MonoBehaviour { private void Start() { var …

【Unity】Unity 2021.2 から Dictionary で GetValueOrDefault などの拡張メソッドが標準で使えるようになった

概要 Unity 2021.2 から Dictionary の 3 つの拡張メソッドが標準で使えるようになった (もしかしたら Unity 2021.1 から使えるかも?) GetValueOrDefault Remove TryAdd using System.Collections.Generic; using UnityEngine; public class Example : Mo…

【Unity】StreamingAssets 内のアセットは無視フォルダに格納するとインポートをスキップできる

検証内容 たとえば StreamingAssets フォルダに 大量のアセットを格納すると インポートに長い時間がかかってしまいます ゲームをビルドする時にアセットバンドルを StreamingAssets にコピーしてからビルドする場合、 ゲームのビルドのたびに長いインポート…

【Unity】Addressables で指定したアドレスに紐づくアセットが存在するか確認する方法

ソースコード /// <summary> /// 指定されたアドレスに紐づくアセットが存在する場合 true を返します /// </summary> public static async Task<bool> Exists( object key ) { var handle = Addressables.LoadResourceLocationsAsync( key ); await handle.Task; return handle.Statu</bool>…

【Unity】Addressables でローカルカタログの読み込みに失敗したか確認する例

ソースコード using System.Linq; using System.Threading.Tasks; using UnityEngine; using UnityEngine.AddressableAssets; public class Example : MonoBehaviour { // ローカルカタログの読み込みに失敗した場合、 // 以下のようなエラーや例外が発生す…

【Unity】Addressables でリモートカタログのダウンロードの通信に失敗したか確認する例

ソースコード using System.Linq; using System.Threading.Tasks; using UnityEngine; using UnityEngine.AddressableAssets; public class Example : MonoBehaviour { // リモートカタログのダウンロードの通信に失敗した場合、 // 以下のようなエラーや例…

【Unity】Addressables でリモートカタログのダウンロード時にディスクの空き容量が不足していないか確認する例

ソースコード using System.Linq; using System.Threading.Tasks; using UnityEngine; using UnityEngine.AddressableAssets; public class Example : MonoBehaviour { // リモートカタログのダウンロード時にディスクの空き容量が不足している場合 // 以下…

【Unity】Addressables でリモートカタログが破損していないか確認する例

ソースコード using System.Linq; using System.Threading.Tasks; using UnityEngine; using UnityEngine.AddressableAssets; public class Example : MonoBehaviour { // リモートカタログのファイルが破損している場合、 // 以下のようなエラーや例外が発…

【Unity】Unity 2021.2 の Build Settings で設定できる Asset Import Overrides をコマンドライン引数から指定する方法

概要 Unity 2021.2 の Build Settings で設定できる Asset Import Overrides を Unity プロジェクトを開く時のコマンドライン引数で指定したい場合は Unity Hub でプロジェクトの行の右端の三点リーダを押して 「コマンドライン引数を加える」を選択して -ov…

【Unity】プロジェクトを開く時のプラットフォームによってインポート時間に差が出るか

検証内容 テクスチャと 3D モデルが合計約 4,000 個存在する Unity プロジェクトで検証 Library フォルダを削除した状態でプロジェクトを開くのにかかる時間を計測 Android、iOS、Windows のプラットフォームごとでインポート時間に差が出るか検証 並列イン…

【Unity】ForceReserializeAssets するとインポートは速くなるか

検証内容 テクスチャと 3D モデルが合計約 4,000 個存在する Unity プロジェクトで検証 Library フォルダを削除した状態でプロジェクトを開くのにかかる時間を計測 古いバージョンからアップデートした後に ForceReserializeAssets を実行した場合と しなか…

【Unity】Unity 2021.2 で Unity Accelerator を使うとインポートがどれだけ速くなるか

検証内容 テクスチャと 3D モデルが合計約 4,000 個存在する Unity プロジェクトで検証 Library フォルダを削除した状態でプロジェクトを開くのにかかる時間を計測 Unity Accelerator を使う場合と使わない場合でかかった時間を比較 並列インポートの設定は…