コガネブログ

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

【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…

【Unity】Device Simulator でデバイスが変更された時に呼び出されるイベント

ソースコード using System; using System.Linq; using System.Reflection; using UnityEditor; using UnityEditor.DeviceSimulation; using UnityEngine; namespace Kogane { [InitializeOnLoad] public static class DeviceSimulatorDeviceChecker { priva…

【Unity】Rider の Regenerate project files をメニューから実行できるようにするエディタ拡張

ソースコード using Packages.Rider.Editor; using UnityEditor; namespace Kogane.Internal { internal static class JetBrainsRiderRegenerateProjectFiles { [MenuItem( "Kogane/Rider/Regenerate project files" )] private static void SyncSolution() …

【Unity】DeviceSimulator のイベントを取得する例

ソースコード using System.Reflection; using UnityEditor; using UnityEditor.DeviceSimulation; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { // 1 フレーム遅らせないと deviceSimulatorMain が null にな…

【Unity】Unity エディタを白色にする「Clean Light Editor Theme」紹介

概要 上記のページで紹介されている .uss を Unity エディタに追加することで Unity エディタを白色にできます 検証環境 Unity 2020.3.33f1 導入手順 Unity プロジェクトに「Editor/Stylesheets/Extensions」フォルダを作成して その中に以下のファイルを作…

【Unity】Odin のような Attribute を使用できる「Tri Inspector」紹介

はじめに 「Tri Inspector」を Unity プロジェクトに導入することで Odin のような Attribute を使用できるようになります 使用例 https://github.com/codewriter-packages/Tri-Inspector 使用できる Attribute は上記のページに詳細に記載されています また…

【Unity】Hierarchy でゲームオブジェクトのアイコンの代わりにコンポーネントのアイコンが表示できる「Hierarchy Window Extensions」紹介

はじめに 「Hierarchy Window Extensions」を Unity プロジェクトに導入することで Hierarchy でゲームオブジェクトのアイコンの代わりに コンポーネントのアイコンが表示できるようになります 導入前 導入後

【Unity】Raycast などを Scene ウィンドウで可視化できる「Raycast Visualization」紹介

はじめに 「Raycast Visualization」を Unity プロジェクトに導入することで Raycast などを Scene ウィンドウで可視化できるようになります 使用例 using Nomnom.RaycastVisualization; using UnityEngine; public class Example : MonoBehaviour { private…

【Unity】フォルダに適用する Preset を簡単に設定できる「Folder Importer Presets」紹介

はじめに 「Folder Importer Presets」を Unity プロジェクトに導入することで フォルダに適用する Preset を簡単に設定できるようになります 使用例 Project ウィンドウで「+ > Nomnom > Folder Importer」を選択して Folder Importer を作成したら Folder …

【Unity】const や static readonly を Inspector のドロップダウンで選択できる「Drop-down with objects of any type in Unity Inspector」紹介

はじめに 「Drop-down with objects of any type in Unity Inspector」を Unity プロジェクトに導入することで const や static readonly を Inspector のドロップダウンで選択できるようになります 使用例 using StructDropDown; using UnityEngine; public…

【Unity】Missing になっているスクリプトの名前がわかるようになる「MissingScriptType」紹介

はじめに 「MissingScriptType」を Unity プロジェクトに導入することで Missing になっているスクリプトの名前がわかるようになります 導入前 導入後 Missing になっているスクリプトの名前は「NewBehaviourScript」だとわかる 注意 パッケージ導入前に Mis…

【Unity】レイヤーやタグ・マテリアル・シェーダ・フィールドなどでゲームオブジェクトを検索できる「Selection Detective」紹介

はじめに 「Selection Detective」を Unity プロジェクトに導入することで レイヤーやタグ・マテリアル・シェーダ・フィールドなどで ゲームオブジェクトを検索できるようになります 使用例 Hierarchy で右クリックして「Selection Detective」を押して Sele…

【Unity】Project ウィンドウでカット & ペーストが可能になる「Project Window Extensions」紹介

はじめに 「Project Window Extensions」を Unity プロジェクトに導入することで Project ウィンドウでカット & ペーストが可能になります 使用例 その他 他にもテキストファイルや JSON ファイルを作成できるようになります

【Unity】指定したコンポーネントがアタッチされているプレハブを検索できる「Vertx.Editors」紹介

はじめに 「Vertx.Editors」を Unity プロジェクトに導入することで 指定したコンポーネントがアタッチされているプレハブを検索できるようになります 使用例 スクリプトの Inspector で「Search for XXXX」を押すと そのコンポーネントがアタッチされている…

【Unity】Scene ウィンドウで重なっているゲームオブジェクトを簡単に選択できる「NSelection」紹介

はじめに 「NSelection」を Unity プロジェクトに導入することで Scene ウィンドウで重なっているゲームオブジェクトを簡単に選択できるようになります 使用例 Scene ウィンドウで Ctrl + 右クリックすると 重なっているゲームオブジェクトを簡単に選択でき…

【Unity】エディタのツールバーやステータスバーを非表示にできるエディタ拡張「Editor-View-Modules」紹介

はじめに 「Editor-View-Modules」を Unity プロジェクトに導入することで エディタのツールバーやステータスバーを非表示にできるようになります 使用例