コガネブログ

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

【Unity】Git のブランチ名やコミットハッシュ、コミットログを管理するスクリプトを生成するエディタ拡張「UniGitUtils」を GitHub に公開しました

リポジトリ 使用例 using UniGitUtils; using UnityEditor; using UnityEngine; public static class Example { [MenuItem( "Tools/Log" )] private static void Log() { var option = new CommitLogOption ( count: 10, isNoMerges: false, format: "%h %cd…

【Unity】Odin Inspector 3.0 Beta が公開

概要

【Unity】テクスチャや SpriteAtlas のインポート設定を自動化するエディタ拡張「UniTexturePreprocessor」を GitHub に公開しました

リポジトリ 使い方 Project ビューの「+ > UniTexturePreprocessor」から設定を管理するアセットを作成できます 「TextureImporterSettings」は テクスチャの Import Settings を上書きする設定を管理するアセットです 上書きしたい項目をチェックして、上書…

【Unity】フォルダの作成関連のエディタ拡張の機能

概要 using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { // フォルダが存在するかどうか if ( !AssetDatabase.IsValidFolder( "Assets/Hoge" ) ) { // フォルダを作成 AssetDatabase.CreateFolder…

【Unity】AssetDatabase.CreateAsset で時間がかかる時に高速化できるかもしれない「AssetDatabase.StartAssetEditing」

概要 using UnityEditor; using UnityEngine; using Debug = UnityEngine.Debug; public class Example : AssetPostprocessor { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var count = 100; var shader = Shader.Find( "Sprites/Diffuse" );…

【Unity】Unity 起動後にインポートされたアセットの数の取得などができる「AssetDatabaseExperimental」

使用例 using UnityEditor; using UnityEditor.Experimental; using UnityEngine; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var imported = AssetDatabaseExperimental.counters.import.imported; var total…

【Unity】Unity プロジェクトに独自のデータを保存できる「EditorUserSettings.SetConfigValue」

概要 using System; using UnityEditor; using UnityEngine; [Serializable] public sealed class Data { public int Id; public string Name; } public sealed class Example : EditorWindow { [MenuItem( "Tools/Open" )] private static void Open() { Ge…

【Unity】エディタが起動している間データを保持できる「ScriptableSingleton」

概要 using UnityEditor; public sealed class Data : ScriptableSingleton<Data> { public int Id; public string Name; } public sealed class Example : EditorWindow { [MenuItem( "Tools/Open" )] private static void Open() { GetWindow<Example>(); } private void </example></data>…

【Unity】親オブジェクトが子オブジェクトをすべて内包するように親オブジェクトの位置とサイズを調整するエディタ拡張「UniParentRectTransformFitter」を GitHub に公開しました

リポジトリ 使い方 Inspector で RectTransform の項目を右クリックして「Fit Children」を選択します Undo に対応しています 孫オブジェクトに対応しています Scale に対応しています

【Unity】External Tools の Android の項目の取得または設定ができるパッケージ「UniAndroidExternalTools」を GitHub に公開しました

リポジトリ 使用例 using UniAndroidExternalTools; using UnityEditor; using UnityEngine; public static class Example { [MenuItem( "Tools/Log" )] private static void Log() { // JDK Installed with Unity (recommended) Debug.Log( "JdkInstalledWi…

【Unity】コマンドライン引数を解析して指定されたクラスのインスタンスに変換するパッケージ「UniCommandLineParser」を GitHub に公開しました

リポジトリ 使用例 Unity.exe ^ -batchMode ^ -quit ^ -executeMethod Example.Run ^ -myOptionInt 25 ^ -myOptionFloat 2.5 ^ -myOptionString "ピカチュウ" ^ -myOptionBool using System; using UniCommandLineParser; using UnityEngine; public static …

【Unity】Unity エディタのタイトルを変更できるエディタ拡張「UniEditorWindowTitleChanger」を GitHub に公開しました

リポジトリ 使用例 using UniEditorWindowTitleChanger; using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { EditorWindowTitleChanger.SetTitle( "ピカチュウ" ); } } 謝辞 このリポジトリは下記…

【Unity】参照型のパラメータを右クリックした時のメニューに GetComponent を追加するエディタ拡張「UniGetComponentContextualPropertyMenu」を GitHub に公開しました

リポジトリ 使用例 using UnityEngine; public class Test : MonoBehaviour { public BoxCollider bocCollider; public BoxCollider[] boxColliders; }

【Unity】シリアライズ対象の変数に自動で参照を割り当てるエディタ拡張「UniGetComponentAttribute」を GitHub に公開しました

リポジトリ 使用例 using UniGetComponentAttribute; using UnityEngine; public class Test : MonoBehaviour { [GetComponent] public BoxCollider m_boxCollider; [GetComponentInParent] public BoxCollider m_boxColliderInParent; [GetComponentInParen…

【Unity】ゲームオブジェクトの複製時に名前の末尾に数値を付けないようにするエディタ拡張「UniGameObjectDuplicationHooker」を GitHub に公開しました

リポジトリ 標準の Duplicate コマンド(Ctrl + D)の挙動を上書きします 複数のゲームオブジェクトの複製に対応しています Undo に対応しています プレハブのインスタンスの複製に対応しています 複製時に transform のプロパティに誤差が生じないようにし…

【Unity】アセットを Inspector にドラッグ&ドロップできるようにするエディタ拡張の例

ソースコード /// <summary> /// 指定された矩形にドラッグ & ドロップされたアセットのパスを返します /// </summary> public bool GetDragAndDropAssetPath( Rect rect, out string assetPath ) { var current = Event.current; var controlId = GUIUtility.GetControlID( Foc…

【Unity】Enter Play Mode Options をエディタ拡張のスクリプトから変更する方法

概要 using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { EditorSettings.enterPlayModeOptionsEnabled = !EditorSettings.enterPlayModeOptionsEnabled; } }

【Unity】Player Settings をエディタ拡張から開く方法

概要 using UnityEditor; public static class Example { [MenuItem( "Tools/Audio" )] private static void OpenAudio() { SettingsService.OpenProjectSettings( "Project/Audio" ); } [MenuItem( "Tools/Editor" )] private static void OpenEditor() { S…

【Unity】Preferences をエディタ拡張から開く方法

概要 using UnityEditor; public static class Example { [MenuItem( "Tools/2DAnimation" )] private static void Open2DAnimation() { SettingsService.OpenUserPreferences( "Preferences/2D/Animation" ); } [MenuItem( "Tools/AnalysisProfiler" )] pri…

【Unity】プレハブモードかどうかをエディタ拡張で確認する方法

概要 using UnityEditor; using UnityEditor.Experimental.SceneManagement; using UnityEngine; public static class Example { [MenuItem( "Tools/Hoge" )] public static void Hoge() { var isPrefabMode = PrefabStageUtility.GetCurrentPrefabStage() !…

【Unity】EditorPrefs で保存されているすべてのキーと値を取得するエディタ拡張

ソースコード using Microsoft.Win32; using System; using System.Collections.Generic; using System.Linq; using System.Text; using UnityEditor; using UnityEngine; public static class Example { [MenuItem( "Tool/Log" )] private static void Log(…

【Unity】Inspector のヘッダ部分に Lock・Debug ボタンを追加するエディタ拡張

ソースコード using System.Reflection; using UnityEditor; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { Editor.finishedDefaultHeaderGUI += OnGUI; } private static void OnGUI( Editor editor ) { Editor…

【Unity】ウィンドウのタイトルや Build Settings の Platform の欄に表示されるプラットフォーム名をエディタ拡張で取得する方法

概要 using System.Reflection; using UnityEditor; using UnityEngine; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { const string name = "GetBuildTargetGroupDisplayName"; const BindingFlags attr = Bindi…

【Unity】Inspector のヘッダ部分にアセットをエクスプローラで開くボタンを追加するエディタ拡張

ソースコード 使用例

【Unity】Unity プロジェクトを開いた瞬間に終了するエディタ拡張

概要 using System.Reflection; using UnityEditor; using UnityEngine.Events; public static class EditorApplicationUtility { private const BindingFlags BINDING_ATTR = BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic; priva…

【Unity】Mac における Project ビューでフォルダを先頭に表示するエディタ拡張

概要 上記サイト様で Mac における Project ビューでフォルダを先頭に表示する エディタ拡張が公開されていたので、備忘録としてこのブログにも書き残しておきます ソースコード(引用)

【Unity】.csproj が生成される時に呼び出されるエディタ拡張の関数

概要 using UnityEditor; using UnityEngine; public sealed class Example : AssetPostprocessor { private static string OnGeneratedCSProject( string path, string content ) { Debug.Log( path ); Debug.Log( content ); return content; } }

【Unity】.sln が生成される時に呼び出されるエディタ拡張の関数

概要 using UnityEditor; using UnityEngine; public sealed class Example : AssetPostprocessor { private static string OnGeneratedSlnSolution( string path, string content ) { Debug.Log( path ); Debug.Log( content ); return content; } }

【Unity】Git で Clone や Pull した時に AddressableAssetSettings.asset が変更状態になる現象を防ぐエディタ拡張

概要 自分の環境だと Git で Clone や Pull した時に AddressableAssetSettings.asset の改行コードが Win から Unix になってしまっていたので、 エディタ拡張で改行コードを Win にするようにした git の core.autocrlf を使おうかと思ったが、現象が発生…

【Unity】エディタ拡張で async / await を使用する

概要 using System.Threading.Tasks; using UnityEditor; using UnityEngine; public class Example { [MenuItem( "Tools/Run" )] private static void Run() { RunAsync(); } private static async void RunAsync() { var count = 10; for ( int i = 0; i <…