コガネブログ

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

【Unity】Assembly Definition を作成する時のコンパイル回数を抑えられるエディタ拡張

リポジトリ 使い方 Project ウィンドウを右クリックして「Kogane > Create Assembly Definition」を選択して 表示されたウィンドウで Assembly Definition を作成することができます 通常の手順で Assembly Definition を作成して設定を変更する場合 Assembl…

【Unity】GUID とアセットの一覧を確認できる EditorWindow

リポジトリ 使用例 Unity メニューの「Window > Kogane > GUID List」を選択すると プロジェクトに含まれているすべてのアセットの GUID を確認できます 検索欄に GUID やアセットのパスを入力して検索することも可能です ダブルクリックすると該当のアセッ…

【Unity】エディタの選択履歴を管理できる「Editor History」紹介

はじめに 「Editor History」を Unity プロジェクトに導入することで エディタの選択履歴を管理できるようになります 使用例 エディタ右上のアイコンから選択履歴を確認できます

【Unity】CodeEditor.CurrentEditor.OpenProject を使うと指定したファイルを外部コードエディタで開ける

概要 using Unity.CodeEditor; using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] public static void Hoge() { CodeEditor.CurrentEditor.OpenProject ( filePath: "Assets/Example.cs", line: 11, column: 20 ); } } たとえば…

【Unity】選択中の EditorWindow のスクリーンショットを撮影するエディタ拡張

ソースコード using System; using System.IO; using UnityEditor; using UnityEngine; namespace Kogane.Internal { internal static class EditorWindowCapturer { [MenuItem( "Kogane/選択中の EditorWindow をキャプチャ" )] private static void Captur…

【Unity】Mac の Unity エディタでも Windows のようなショートカットキーで Delete・Redo・Rename できるようにするエディタ拡張

ソースコード #if UNITY_EDITOR_OSX using System.Reflection; using UnityEditor; using UnityEditor.ShortcutManagement; using UnityEngine; namespace Kogane.Internal { /// <summary> /// Windows のようにショートカットキーを使用できるようにするエディタ拡</summary>…

【Unity】ObjectField からドラッグできるようになる「DragAndDropFromField」紹介

はじめに 「DragAndDropFromField」を Unity プロジェクトに導入することで ObjectField からドラッグできるようになります 導入後

【Unity】Unity 再生時に Game ビューをフォーカスするエディタ拡張

ソースコード using System; using UnityEditor; namespace Kogane.Internal { [InitializeOnLoad] internal static class AutoFocusGameViewOnPlayModeStateChanged { private static readonly Type GAME_VIEW_TYPE; static AutoFocusGameViewOnPlayModeSta…

【Unity】Unity 2021 から削除された古いツールバーが使えるようになる「Unity-2021-with-old-toolbar」紹介

はじめに 「Unity-2021-with-old-toolbar」を Unity プロジェクトに導入することで Unity 2021 から削除された古いツールバーが使えるようになります 導入後

【Unity】Transform の Inspector のコンテキストメニューに「Copy Component」と「Paste Component Values」を表示するエディタ拡張

ソースコード using UnityEditor; using UnityEditorInternal; using UnityEngine; namespace Kogane.Internal { internal static class TransformCopyComponentPasteComponentValues { [MenuItem( "CONTEXT/Transform/Copy Component" )] public static voi…

【Unity】Unity プロジェクトのフォルダをエクスプローラで開けるようにするエディタ拡張

ソースコード using System.Diagnostics; using System.IO; using UnityEditor; namespace Kogane.Internal { internal static class ShowProjectInExplorer { #if UNITY_EDITOR_WIN [MenuItem( "File/Show Project in Explorer" )] #else [MenuItem( "File/…

【Unity】ScriptableObject を CreateAssetMenu を使わずに生成できるようにする

ソースコード using UnityEditor; using UnityEngine; namespace Kogane.Internal { [InitializeOnLoad] internal static class ScriptableObjectCreatorOnInspector { static ScriptableObjectCreatorOnInspector() { Editor.finishedDefaultHeaderGUI -= O…

【Unity】コンポーネントの名前をゲームオブジェクトに反映できるエディタ拡張

ソースコード using UnityEditor; using UnityEngine; namespace Kogane.Internal { internal static class RenameGameObjectMenuItem { [MenuItem( "CONTEXT/Component/Rename Game Object" )] private static void Rename( MenuCommand menuCommand ) { va…

【Unity】エディタ拡張で検索欄を簡単に表示する方法

概要 using UnityEditor; using UnityEditor.IMGUI.Controls; public class Example : EditorWindow { private SearchField m_searchField; private string m_text; [MenuItem( "Tools/Hoge" )] private static void Open() { GetWindow<Example>(); } private void O</example>…

【Unity】Scene Template からシーンを作成するエディタ拡張

概要 using UnityEditor; using UnityEditor.SceneTemplate; using UnityEngine; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var sceneTemplateAssetPath = "【.scenetemplate のパス】"; var scenePath = "【…

【Unity】パッケージを埋め込みパッケージに変更できるボタンを Inspector に表示するエディタ拡張

ソースコード using System.IO; using UnityEditor; using UnityEditor.PackageManager; using UnityEditorInternal; using UnityEngine; namespace Kogane.Internal { [InitializeOnLoad] internal static class PackageEmbedder { static PackageEmbedder(…

【Unity】Mute Audio を Unity メニューから切り替えられるエディタ拡張

ソースコード using UnityEditor; using UnityEngine; namespace Kogane.Internal { [InitializeOnLoad] internal static class MuteAudioMenuItem { private const string MENU_ITEM_NAME = "Kogane/Mute Audio"; static MuteAudioMenuItem() { EditorAppli…

【Unity】Inspector のヘッダに「Lock」「Debug」「Properties...」「Reveal In Finder」ボタンを表示するエディタ拡張

ソースコード using System.Linq; using System.Reflection; using UnityEditor; using UnityEngine; namespace Kogane.Internal { [InitializeOnLoad] internal static class InspectorHeaderGUI { static InspectorHeaderGUI() { Editor.finishedDefaultHe…

【Unity】Inspector の Add Component ボタンの下にボタンを追加してみる

概要 using System.Linq; using UnityEditor; using UnityEngine; using UnityEngine.UIElements; public static class Example { [MenuItem( "Tools/Hoge" )] public static void Hoge() { var assembly = typeof( Editor ).Assembly; var windowTypeName =…

【Unity】EditorWindow で UIElements を構築するスクリプトを書く場合は CreateGUI 関数を使用する

概要 CreateGUI is called when the EditorWindow's rootVisualElement is ready to be populated. CreateGUI 関数は EditorWindow の rootVisualElement が 操作できるようになるタイミングで呼び出される using UnityEditor; using UnityEngine.UIElements…

【Unity】UIElements で VisualElement の背面に存在する UI をクリックできるようにする

概要 var toolbar = new VisualElement { pickingMode = PickingMode.Ignore, }; pickingMode に PickingMode.Ignore を設定すると その VisualElement はクリックできないようになるため VisualElement の背面に存在する UI がクリックできるようになる

【Unity】UIElements で要素を右から左に配置したい場合

概要 using UnityEditor; using UnityEngine.UIElements; public sealed class Test : EditorWindow { [MenuItem( "Tools/Hoge" )] public static void Open() { GetWindow<Test>(); } public void CreateGUI() { var toolbar = new VisualElement(); toolbar.Add(</test>…

【Unity】UIElements で Console ウィンドウにボタンを追加するエディタ拡張のサンプル

ソースコード using System.Linq; using UnityEditor; using UnityEngine; using UnityEngine.UIElements; [InitializeOnLoad] public static class Example { static Example() { EditorApplication.delayCall += () => { var assembly = typeof( EditorWin…

【Unity】Ctrl + T で Search を開けるようにするエディタ拡張

ソースコード using UnityEditor; using UnityEditor.ShortcutManagement; using UnityEngine; namespace Kogane.Internal { internal static class SearchShortcutKey { [Shortcut( "Kogane/Open Search New Window", KeyCode.T, ShortcutModifiers.Action …

【Unity】Package Manager の Install・Remove ボタンの隣にボタンを表示するサンプル

ソースコード using System; using System.Collections.Generic; using System.IO; using System.Reflection; using UnityEditor; using UnityEditor.PackageManager.UI; using UnityEditorInternal; using UnityEngine.UIElements; using PackageInfo = Uni…

【Unity】Device Simulator に Mute Audio ボタンを追加するエディタ拡張

ソースコード using JetBrains.Annotations; using UnityEditor; using UnityEditor.DeviceSimulation; using UnityEngine.UIElements; namespace Kogane.Internal { [UsedImplicitly] internal sealed class DeviceSimulatorMuteAudioPlugin : DeviceSimula…

【Unity】EditorWindow を開いた時に TextField をフォーカスして編集状態にする方法

概要 using UnityEditor; using UnityEngine; public sealed class Example : EditorWindow { private bool m_isInitialized; private string m_name; [MenuItem( "Tools/Hoge" )] public static void Open() { GetWindow<Example>(); } private void OnGUI() { GUI.S</example>…

【Unity】スクリプトから UIElements の要素を横に並べる方法

概要 var root = new VisualElement(); root.style.flexDirection = FlexDirection.Row; VisualElement の style.flexDirection に FlexDirection.Row を指定する これだけだと要素が左に表示されてしまう var root = new VisualElement(); root.style.flexD…

【Unity】Scenes In Build が変更されたかどうかを検知する方法

ソースコード using System.Linq; using UnityEditor; using UnityEngine; internal sealed class Example : AssetPostprocessor { private const string PATH = "ProjectSettings/EditorBuildSettings.asset"; private static void OnPostprocessAllAssets …

【Unity】AspectRatioFitter の aspectRatio にスプライトのアスペクト比を設定できるようにするエディタ拡張

ソースコード using UnityEditor; using UnityEngine; using UnityEngine.UI; namespace Kogane.Internal { internal static class AspectRatioFitterMenuItem { [MenuItem( "CONTEXT/AspectRatioFitter/Set Default Aspect Ratio" )] private static void S…