0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MainToolbarにRiderを呼び出すボタンを追加する

0
Posted at

UI組み立てなどをゴリゴリやっていて、いざRiderを呼び出そうとしたら

  • 適当なScriptファイルを探す → ダブルクリック

をしていたのですが、地味に面倒くさい。
という事で、MainToolbarに呼び出しボタンを追加してみました

image.png

前提

本記事は

  • Unity 6000.3.11
  • Windows
  • Rider

の環境で記載しています

準備

せっかくなのでRiderのアイコンを手配しましょう
下記のページで公式が配布しています

ダウンロードしたら「Assets/Editor Default Resources」に配置しましょう。ファイル名は元々の「Rider_icon.png」とします

image.png

これで準備完了です

コード

という事でコードです

MainToolbarRider.cs
using UnityEditor.Experimental;
using UnityEditor.Toolbars;
using UnityEditorInternal;
using UnityEngine;
using UnityEngine.UIElements;

namespace ScreenPocket.Core.Editor
{
    /// <summary>
    /// ツールバーにRider呼び出しボタンを追加
    /// </summary>
    public static class MainToolbarRider
    {
        private const string ElementPath = "ScreenPocket/Rider";
        private const string ToolTip = "ScriptEditor呼び出し";

        private static bool _visibleIcon = true;
        private static bool _visibleName = false;

        /// <summary>
        /// ボタン作成
        /// </summary>
        /// <returns></returns>
        [MainToolbarElement(ElementPath, defaultDockPosition = MainToolbarDockPosition.Left)]
        private static MainToolbarElement Create()
        {
            var scriptEditorName = string.Empty;
            Texture2D iconTexture = null;
            
            var scriptEditor = ScriptEditorUtility.GetExternalScriptEditor();
            if (scriptEditor.Contains("Rider"))
            {
                if (_visibleIcon)
                {
                    iconTexture = EditorResources.Load<Texture2D>("Rider_icon.png");
                }
                
                if (_visibleName)
                {
                    scriptEditorName = "Rider";
                }
            }
            else
            {
                //TODO:VisualStudioやら他エディタのアイコンロード
            }

            //どっちも非表示だと流石に見づらいので仮Textを入れる
            if (!_visibleIcon && !_visibleName)
            {
                scriptEditorName = "ScriptEditor呼び出し";
            }

            var button = new MainToolbarButton(new( scriptEditorName, iconTexture, ToolTip), OnClickButton);
            //右クリックメニュー登録
            button.populateContextMenu = OnPopulateContextMenu;
            return button;
        }

        /// <summary>
        /// ボタンをクリックした時の処理
        /// エディタを開くだけ
        /// </summary>
        private static void OnClickButton()
        {
            InternalEditorUtility.OpenFileAtLineExternal("", 0);
        }
        
        /// <summary>
        /// 右クリックの際の項目追加
        /// </summary>
        /// <param name="dropdownMenu"></param>
        private static void OnPopulateContextMenu(DropdownMenu dropdownMenu)
        {
            dropdownMenu.AppendAction("Icon", _ =>
            {
                _visibleIcon = !_visibleIcon;
                Refresh();
            }, _visibleIcon ? DropdownMenuAction.Status.Checked : DropdownMenuAction.Status.Normal);
            
            dropdownMenu.AppendAction("NameText", _ =>
            {
                _visibleName = !_visibleName;
                Refresh();
            }, _visibleName ? DropdownMenuAction.Status.Checked : DropdownMenuAction.Status.Normal);
        }
        
        private static void Refresh()
        {
            MainToolbar.Refresh(ElementPath);
        }
    }
}

ポイントは下記

  • Riderのみ記載しています。VisualStudioは良い感じにカスタマイズしてください
  • いちおう右クリックで「アイコン表示」か「名前表示」か「両方表示」かを切り替えられるようにしてます。
    MacとかMainToolbar領域が狭いですしね。節約節約。

終わりに

というわけで、小ネタでした。
一度開いたらAlt+Tabでフォーカス切り替えが出来るのですが、開く一発目ではなかなか役立つのではないかな?と思います。

VisualStudioは個人開発ではもう何年も使用していないので未サポートです。
まぁ多分

InternalEditorUtility.OpenFileAtLineExternal("", 0);

で同じく呼び出せるはずなので、アイコンロード周りだけ各位頑張ってください。

こんな感じで「よく使うアプリケーションを呼び出すランチャー的な追加メニュー」を用意しても良さそうですね~

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?