UI組み立てなどをゴリゴリやっていて、いざRiderを呼び出そうとしたら
- 適当なScriptファイルを探す → ダブルクリック
をしていたのですが、地味に面倒くさい。
という事で、MainToolbarに呼び出しボタンを追加してみました
前提
本記事は
- Unity 6000.3.11
- Windows
- Rider
の環境で記載しています
準備
せっかくなのでRiderのアイコンを手配しましょう
下記のページで公式が配布しています
ダウンロードしたら「Assets/Editor Default Resources」に配置しましょう。ファイル名は元々の「Rider_icon.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);
で同じく呼び出せるはずなので、アイコンロード周りだけ各位頑張ってください。
こんな感じで「よく使うアプリケーションを呼び出すランチャー的な追加メニュー」を用意しても良さそうですね~

