コガネブログ

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

【Unity】Project ビューを右クリックした時に表示されるメニューをカスタマイズできるエディタ拡張「Unity Project Window Menu Customizer」を GitHub に公開しました

はじめに Project ビューを右クリックした時に表示されるメニューをカスタマイズできるエディタ拡張 「Unity Project Window Menu Customizer」を GitHub に公開しました 使用例 インストール "com.baba_s.unity-project-window-menu-customizer": "https://…

【Unity】各プラットフォームにおいてコンパイルエラーが発生しないか確認できるテストコード

検証環境 Unity 2019.3.0f6 ソースコード 上記のスクリプトを Unity プロジェクトの Editor フォルダに追加します 使用例 using UnityEngine; public class Example : MonoBehaviour { private void Awake() { #if UNITY_ANDROID ここでコンパイルエラー #en…

【Unity】シーン遷移時に簡単にデータを渡すことができるパッケージ「Unity Scene Data Transfer」を GitHub に公開しました

はじめに シーン遷移時に簡単にデータを渡すことができるパッケージ 「Unity Scene Data Transfer」を GitHub に公開しました インストール "com.baba_s.unity-scene-data-transfer": "https://github.com/baba-s/unity-scene-data-transfer.git", manifest.…

【おすすめスライド】「今日からできる!簡単 .NET 高速化 Tips」

スライド

【Unity】Package Manager 用の自作パッケージにサンプルを含める方法

はじめに Package Manager 用の自作パッケージには サンプル用のアセットを含めることができます サンプルは Package Manager からインポートできるようになります インポートしたサンプルはこのように Assets フォルダ内に展開されます 検証環境 Unity 2019…

【C#】関数の戻り値で ValueTuple を使用する

概要 private (int id, string name) GetCharacter() { return ( 25, "ピカチュウ" ); } 関数の戻り値で ValueTuple を使用することで var character = GetCharacter(); Console.WriteLine( character.id + ", " + character.name ); var ( id, name ) = Get…

【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】ゲームのパフォーマンスに影響を与えるソースコードやプロジェクトの設定を分析できる「ProjectAuditor」紹介

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

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

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

【Unity】Python で .asset や .prefab、.unity などのファイルを編集する方法

はじめに この記事は「Unity #3 Advent Calendar 2019」の 12/9 の記事です 「Unity YAML Parser」を Python で使用することで Unity の .asset や .prefab、.unity などのファイルを編集できます 目次 はじめに 目次 検証環境 インストール方法 ProjectSett…

【Unity】エディタの再生ボタンの左右に独自の GUI を追加する

はじめに この記事は「Unity Advent Calendar 2019」の 12/6 の記事です 上記の「CustomToolbar」を Unity プロジェクトに導入することで エディタの再生ボタンの左右に独自の GUI を追加することができます 使用例 使い方 「CustomToolbar」を Unity プロジ…

【Unity】using static を使用してエディタ拡張の OnGUI の記述を少し楽にする

はじめに この記事は「Unity #3 Advent Calendar 2019」の 12/5 の記事です private void OnGUI() { EditorGUILayout.BeginHorizontal(); if ( GUILayout.Button( "ピカチュウ" ) ) { } if ( GUILayout.RepeatButton( "ライチュウ" ) ) { } EditorGUILayout.…

【Unity】50種類以上のデバイスでゲーム画面がどう表示されるかエディタ上で確認できて、ノッチやセーフエリアの対応もできる「Universal Device Preview」紹介

はじめに この記事は「Unityアセット冬のアドベントカレンダー 2019 Winter」の 12/2 の記事です 「Universal Device Preview」を Unity プロジェクトに導入することで 50種類以上のデバイスでゲーム画面がどう表示されるかエディタ上で確認できて、 ノッチ…

【Unity】GetComponentInParent の null チェックを少しだけ簡潔に記述できる TryGetComponentInParent 拡張メソッド

ソースコード using UnityEngine; public static class ComponentExt { public static bool TryGetComponentInParent<T>( this Component self, out T component ) where T : Component { component = self.GetComponentInParent<T>(); return component != null; </t></t>…

【Unity】GetComponentInChildren の null チェックを少しだけ簡潔に記述できる TryGetComponentInChildren 拡張メソッド

ソースコード using UnityEngine; public static class ComponentExt { public static bool TryGetComponentInChildren<T>( this Component self, out T component ) where T : Component { component = self.GetComponentInChildren<T>(); return component != nu</t></t>…

【Unity】TryGetComponent を Unity 2018 でも使用できるようにする拡張メソッド

ソースコード using UnityEngine; public static class ComponentExt { public static bool TryGetComponent<T>( this Component self, out T component ) where T : Component { component = self.GetComponent<T>(); return component != null; } } public stati</t></t>…

【Unity】TryGetComponent の活用方法

概要 var collider = GetComponent<BoxCollider>(); if ( collider != null ) { Debug.Log( collider ); } GetComponent だとこのように記述する処理を if ( TryGetComponent<BoxCollider>( out var collider ) ) { Debug.Log( collider ); } TryGetComponent を使うとちょっとだけ簡潔</boxcollider></boxcollider>…

【Unity】EditorGUIUtility.IconContent で使用できる 1000 種類以上のアイコンがまとめられている GitHub リポジトリ

概要 上記の GitHub リポジトリでは EditorGUIUtility.IconContent で使用できる 1000 種類以上のアイコンがすべてまとめられています 使用例 using UnityEditor; using UnityEngine; public sealed class Example : EditorWindow { [MenuItem( "Tools/Hoge"…

【Unity】Text の Inspector に ContentSizeFitter をアタッチするボタンを追加するエディタ拡張

はじめに 上記の記事の手順を踏むことで Text の Inspector に ContentSizeFitter をアタッチするボタンを追加できます 概要 if ( GUILayout.Button( "Add ContentSizeFitter" ) ) { var text = target as Text; var gameObject = text.gameObject; if ( gam…

【Unity】HorizontalLayoutGroup や VerticalLayoutGroup の Inspector に ContentSizeFitter をアタッチするボタンを追加するエディタ拡張

はじめに 上記の記事の手順を踏むことで HorizontalLayoutGroup や VerticalLayoutGroup の Inspector に ContentSizeFitter をアタッチするボタンを追加できます 概要 if ( GUILayout.Button( "Add ContentSizeFitter" ) ) { var layoutGroup = target as H…

【Unity】ContentSizeFitter の Inspector に HorizontalFit と VerticalFit を同時に変更するボタンを追加するエディタ拡張

はじめに 上記の記事の手順を踏むことで ContentSizeFitter の Inspector に HorizontalFit と VerticalFit を同時に変更するボタンを追加できます ソースコード using UnityEngine; using UnityEngine.UI; namespace UnityEditor.UI { [CustomEditor(typeof…

【Unity】uGUI の Button や Text の Inspector をエディタ拡張する方法

はじめに uGUI の Button や Text の Inspector は通常方法でエディタ拡張することはできないですが、 https://bitbucket.org/Unity-Technologies/ui uGUI のソースコードはオープンソースとして上記 URL で公開されているので プロジェクトファイルをダウン…

【Unity】文字列補間を使用する場合も ToString を付けたほうが GC Alloc は少なくなる

概要 using UnityEngine; using UnityEngine.Profiling; public class Example : MonoBehaviour { private void Update() { int num1 = 1; int num2 = 2; // ToString あり var sampler1 = CustomSampler.Create( "ToString あり" ); sampler1.Begin(); var …

【Unity】TextMesh Pro のオブジェクト作成時に Raycast Target をデフォルトでオフにする方法

概要 TMP Settings を選択して 「Enable Raycast Target」をオフにすると、 TextMesh Pro のオブジェクト作成時に Raycast Target がオフになります

【Unity】メッセージバスに関するオープンソース紹介(6個)

一覧 Unibus Signals MessageKit BasicEventBus Unity Events 2.0 KLab Message Buses for Unity

【C#】高速な列挙型の API を使用できる「FastEnum」紹介

はじめに 「FastEnum」をプロジェクトに追加することで 高速な列挙型の API を使用できるようになります インストール Visual Studio メニューの「ツール>NuGet パッケージ マネージャー> ソリューションの NuGet パッケージの管理」を選択します 「参照」タ…

【C#】ValueTuple を使用して配列やリストの foreach で簡単にインデックスを取得できる拡張メソッド

ソースコード using System; using System.Collections.Generic; public static class IEnumerableExt { public static IEnumerable<(int index, T value)> WithIndex<T> ( this IEnumerable<T> source ) { if ( source == null ) { throw new ArgumentNullExcepti</t></t>…

【Chrome】GitHub や GitLab のアイコン表示を拡張できる「File Icon for GitHub and GitLab」紹介

はじめに 「File Icon for GitHub and GitLab」を Chrome に追加することで GitHub や GitLab のアイコン表示を拡張できます 使用例 適用前 適用後 ファイル名や拡張子に合わせてアイコン表示が拡張されます

【Chrome】GitHub ページの左側にリポジトリの階層構造を表示できる「Octotree」紹介

はじめに 「Octotree」を Chrome に追加することで GitHub ページの左側にリポジトリの階層構造を表示できます 使用例 画面左の「Octotree」ボタンを押すと表示できます ピンアイコンをクリックして固定することもできます

【Chrome】GitHub で .editorconfig や .gitignore などのファイルを非表示にできる「Hide Files on GitHub」紹介

はじめに 「Hide Files on GitHub」を Chrome に追加することで GitHub で .editorconfig や .gitignore などのファイルを非表示にできます 使用例 導入前 導入後 補足 デフォルトでは下記の正規表現にマッチするファイルが非表示になります ^\. ^license ^c…