コガネブログ

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

【Unity】Unity Test Runner のテストをカテゴリ分けする方法

概要 using NUnit.Framework; public class Example { [Test] [Category( "ポケモン/ピカチュウ" )] public void Test1() { } [Test] [Category( "ポケモン/カイリュー" )] public void Test2() { } } Category属性を使用することで Unity Test Runner のテ…

【Unity】Unity 2019.3.0f3 や Unity 2019.3.0f1 だと OnInspectorGUI で EditorGUILayout.Foldout の矢印が動作しない

概要 using UnityEditor; [CustomEditor( typeof( Example ) )] public class ExampleEditor : Editor { private bool m_isOpen; public override void OnInspectorGUI() { m_isOpen = EditorGUILayout.Foldout( m_isOpen, "Open" ); if ( m_isOpen ) { Edit…

【Unity】ScriptableObject(.asset)を ProjectSettings フォルダに保存・読み込みしたい場合

概要 ScriptableObject(.asset)は ProjectSettings フォルダ以下に保存・読み込みができないが、 下記のスクリプトのように JSON 形式に変換することで保存・読み込みができる 参考サイト様

【Unity】Unity 2019.3 で UIElements を使用してエディタの色を変更してみる

概要 上記のような「common.uss」という名前のファイルを Unity 2019.3 のプロジェクトの 「Assets/Editor/StyleSheets/Extensions」フォルダに追加することで Unity エディタのいくつかの UI の色を変更することができます 例えば common.uss で AppCommand…

【Unity】LINQ の結果を匿名型ではなく ValueTuple で受け取る

概要 using System.Linq; using UnityEngine; public class Example : MonoBehaviour { private static string[] m_list = { "フシギダネ", "フシギソウ", "フシギバナ", }; private void Update() { // 匿名型 var r1 = m_list.Select( c => new { name = c…

【Unity】構造体をインターフェイスで受け取ると GC Alloc が発生するが Generic 制約でインターフェイスを指定すると発生しない

概要 using UnityEngine; public interface ICharacter { } public struct Character : ICharacter { } public class Example : MonoBehaviour { private Character m_character = new Character(); private void Update() { Hoge1( m_character ); } privat…

【Unity】System.Enum で引数を受け取ると GC Alloc が発生するが Generic 制約 で Enum を指定すると発生しない

概要 using System; using UnityEngine; public class Example : MonoBehaviour { private enum Type { GRASS, FIRE, WATER, } private void Update() { Hoge1( Type.FIRE ); } private void Hoge1( Enum value ) { } } System.Enum で引数を受け取ると GC A…

【Unity】ローカル変数をキャプチャする場合、その処理が実行されなくても GC Alloc は発生する

概要 using System.Linq; using UnityEngine; public class Example : MonoBehaviour { private static string [] m_list = { "フシギダネ", "フシギソウ", "フシギバナ", }; private void Update() { var name = "ピカチュウ"; // ここで return するので r…

【Unity】LINQ の拡張メソッドを自作して GC Alloc を減らす方法

概要 using System.Linq; using UnityEngine; public class Example : MonoBehaviour { private static string[] m_list = { "フシギダネ", "フシギソウ", "フシギバナ", }; private void Update() { var name = "ピカチュウ"; var result = m_list.Where( c…

【Unity】ゲームのパフォーマンスに影響を与えるソースコードやプロジェクトの設定を分析できる「Project Auditor」紹介

はじめに 「Project Auditor」を Unity プロジェクトに導入することで ゲームのパフォーマンスに影響を与えるソースコードやプロジェクトの設定を 分析できるようになります (この記事を書いた時点ではまだ実験中の機能とのことです) 使い方 Unity メニュ…

【Unity】Scene ビューに Cube や Sphere やスプライトのギズモを簡単に表示できる「DrawGizmo」紹介

はじめに 「DrawGizmo」を Uniy プロジェクトに導入することで Scene ビューに Cube や Sphere やスプライトのギズモを簡単に表示できるようになります 使用例 Cube Sphere スプライト

【Unity】エディタで Game ビューのキャプチャを簡単に撮ることができる「UniEditorScreenshot」紹介

はじめに 「UniEditorScreenshot」を Unity プロジェクトに導入することで エディタで Game ビューのキャプチャを簡単に撮ることができます 使い方 Unity メニューの「Window > Capture Editor」を選択します そして、表示されたウィンドウで「Take screensh…

【Unity】メソッドチェーンでリッチテキストを設定できる「RichText for Unity」紹介

はじめに 「RichText for Unity」を Unity プロジェクトに導入することで メソッドチェーンでリッチテキストを設定できるようになります 使用例 var str = "ピカチュウ"; // 通常 Debug.Log( $"<color=purple><size=17><b><i>{str}</i></b></size></color>"); // RichText for Unity Debug.Log( $"{str.Italic().B…

【Unity】Gist からソースコードをダウンロードしてプロジェクトに追加できる「GistImporter.cs」紹介

ソースコード 使い方 上記のソースコードを Unity プロジェクトの「Assets/Gists」フォルダに追加して Gist の URL をクリップボードにコピーした状態で Unity メニューの「Tools > Import Gist」を押すと Gist からソースコードをダウンロードしてプロジェ…

【Unity】Collision で CompareTag を使用できるようにする拡張メソッド

ソースコード using UnityEngine; namespace MyProject { public static class CollisionExt { public static bool CompareTag( this Collision self, string tag ) { return self.gameObject.CompareTag( tag ); } } } 使用例 適用前 private void OnCollis…

【Unity】Collision2D で CompareTag を使用できるようにする拡張メソッド

ソースコード using UnityEngine; namespace MyProject { public static class Collision2DExt { public static bool CompareTag( this Collision2D self, string tag ) { return self.gameObject.CompareTag( tag ); } } } 使用例 適用前 private void OnCo…

【Unity】他のオブジェクトの OnCollisionEnter や TriggerEnter などのイベントを検知できる「Unity Event Bridge」紹介

はじめに 「Unity Event Bridge」を Unity プロジェクトに導入することで 他のオブジェクトの OnCollisionEnter や TriggerEnter などのイベントを 検知できるようになります 使用例 using EventBridge; using UnityEngine; public class Example : MonoBeha…

【Unity】Xcode プロジェクトをキャッシュしてビルド時間を削減できる「UnityXcodeCache」紹介

はじめに 「UnityXcodeCache」を Unity プロジェクトに導入することで Xcode プロジェクトをキャッシュしてビルド時間を削減できようになります 使い方 「Tools > Xcode > WriteCacheXcode」を実行します Xcode プロジェクトをビルドします 「Tools > Xcode …

【Unity】No Sprite Editor Window registered. Please download 2D Sprite package from package manager.

概要 スプライトの「Sprite Editor」を開こうとした時に No Sprite Editor Window registered. Please download 2D Sprite package from package manager. このようなメッセージが表示された場合は Unity メニューの「Window > Package Manager」から 「2D S…

【Unity】Unity Remote で表示されるゲーム画面をキレイにする方法

概要 Unity メニューの「Edit > Project Settings...」から「Editor」を選択して 「Resolution」を「Normal」に変更すると、 Unity Remote で表示されるゲーム画面をキレイにすることができます (代わりに Unity Remote の動作が遅くなる可能性があります)…

【Unity】Unity Remote 接続中に Input.GetKey や Input.GetButton などが反応しない場合

概要 Unity メニューの「Edit > Project Settings...」から「Editor」を選択して 「Joystick Source」を「Local」に変更すると、 Unity Remote 接続中に Input.GetKey や Input.GetButton などが動作するようになります

【Unity】Inspector で Build Report を確認する方法

はじめに 「Build Report Inspector」を Unity プロジェクトに導入することで Inspector で Build Report を確認できるようになります 導入方法 Package Manager の「Advanced > Show preview packages」をオンにして 「Build Report Inspector」をインスト…

【Unity】Unity Test Runner のテストに説明をつける方法

概要 using NUnit.Framework; [Description( "ピカチュウ" )] public class Example { [Test] [Description( "カイリュー" )] public void Test1() { } } Description 属性をクラスや関数に適用することで テストに説明をつけることができます

【Unity】.unitypackage のインポートを開始した・完了した・キャンセルされた・失敗した時に呼び出されるイベント

概要 using UnityEditor; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { // .unitypackage のインポートを開始した AssetDatabase.importPackageStarted += packageName => { Debug.Log( packageName ); }; // .…

【Unity】Inspector で UnityEvent のリスナーの順番を変更できる「Easy Event Editor」紹介

はじめに 「Easy Event Editor」を Unity プロジェクトに導入することで Inspector で UnityEvent のリスナーの順番を変更できるようになります 使用例 適用前 適用後

【Unity】Particle System の Inspector で未使用のモジュールを非表示にする方法

概要 Particle System の Inspector で「+」ボタンを押して 「Show All Modules」をオフにすると 未使用のモジュールは非表示にできます この状態で使用するモジュールを追加したい場合は 「+」ボタンから追加したいモジュールを選択します 参考ツイート様 W…

【Unity】Unity 2019.3 のエディタで使用されているフォントを 2019.2 以前のものに変更する方法

概要 Unity メニューの「Edit > Preferences...」から 「General」の「Editor Font」を変更することで エディタのフォントを 2019.2 以前のものに変更できます 参考ツイート様 #unitytips #unity3d Over time, I'm still not used to using the new Unity 20…

【Unity】Inspector で入力欄を限界まで大きく表示できる「UnityCompactFieldAttribute」紹介

はじめに 「UnityCompactFieldAttribute」を Unity プロジェクトに導入することで Inspector で入力欄を限界まで大きく表示できるようになります 使用例 デフォルト using UnityEngine; public class Example : MonoBehaviour { public int m_id; public str…

【Unity】Rider で C# 8.0 のサポートを無効化する方法

はじめに Rider では C# 8.0 がサポートされているため、 switch 文を式に置き換える、といったことが可能ですが 現在、Unity は C# 8.0 をサポートしていないため、 Rider の機能で C# 8.0 の文法に置き換えてしまうと、 Unity でコンパイルエラーになって…

【Unity】Sprite で Radial 360 の fillAmount を設定できる「FilledSpriteShader」紹介

はじめに 「FilledSpriteShader」を Unity プロジェクトに導入することで Sprite で Radial 360 の fillAmount を設定できるようになります 使用例 使い方 Sprite Renderer のマテリアルに「SampleMaterial」を設定します (もしくは Shader が「Unlit/Fille…