はじめに
株式会社QualiArtsの今井です。テクニカルアーティストとしてIDOLY PRIDEのライブシステムの設計や、ツールの開発をしています。
本記事はQualiArts Advent Calendar 2023の2日目の記事です。
1日目の記事は# モバイルゲーム開発の現場におけるテクニカルアーティストでした。
今回は実際にテクニカルアーティストが作成したツールで、社内で広く活用されているUnityのツールランチャーを公開します。
また、公開に際して機能の説明とこだわりポイントを紹介します。
リポジトリ
本記事で紹介するツールランチャーはGitHubで公開しており、プロジェクトに導入を検討している方はこちらのリンクをご覧ください。
https://github.com/QualiArts/UnityToolLauncher
機能一覧
ツールランチャーの主な機能を以下に紹介します。

ツールを開く
ツール一覧をリスト表示し、選択したツールを開くことができます。

ヘルプを開く
ツールのヘルプページをブラウザで開くことができます。

ツールの追加・カスタマイズ
チームや個人で自作したツールも追加可能です。

プリセット
プリセットを使用して、異なるツールを整理して表示できます。 たとえばデバッグ時に使うツール、UI制作時に使うツールなどを分けておき切り替えることができます。

設定方法
それぞれの設定方法は以下の通りです
| 設定項目 | 画像 | 説明 |
|---|---|---|
| 略称 | | アイコンとして表示される略称を指定します ![]() |
| 名前 | ![]() | ツールの名前を指定します ![]() |
| 説明 | ![]() | ツールの説明を記入します ![]() |
| 説明ページのURL(省略可) | ![]() | ツールのマニュアルがあるURLを表示します。省略した場合はボタンが表示されなくなります ![]() |
| 起動ツール | ![]() | 起動ツールの設定方法を参照 |
起動ツールの設定方法
起動ツールを指定するにはツール検索ボタンを押して、ツールを選択します。
例 ) Light Explorerを指定する場合
ツール検索ボタンからLight Explorerを指定します。

テスト実行ボタンから、指定したツールをテストすることができます

ツールを作ったきっかけ
ゲーム開発において、QualiArtsでは多くのツールを使用し、場合によっては独自ツールを開発します。
これらのツールは作業を効率化することに役立ちますが、数が増えるにつれて、管理やアクセスが煩雑になり、せっかく作ったツールが使われない・チームで共有されないといった問題が発生しました。
そこで、制作した独自ツールを最大限活用するためのツールランチャーが必要になりました。
簡単な操作でツールを素早く開けるだけでなく、ヘルプページへ簡単にアクセスできる機能や日本語での説明文など、チームで使われることを意識した設計にしました。
こだわりポイント
使いやすくするためにこだわったポイントを紹介します。
最後に開いていたプリセットの保持
ツールランチャーを開いた時、最後に開いていたプリセットが表示されます。

これは EditorUserSettings.SetConfigValue を利用して実現しています。
このメソッドはキーと値のペアを引数に取り情報を保存します。保存場所はユーザー個別の領域になりチームで共有されません。
ツールランチャーでは以下のようにキーに一意の文字列、Valueにユーザー設定をJson化した文字列を保存することで、設定を保存しています。
/// <summary>
/// ユーザーことのランチャーの設定を保存するクラス
/// </summary>
public static class UserSettingManager
{
private const string Key = "ToolLauncher.ToolLauncherUserSettings";
public static void Save(UserSettings settings)
{
EditorUserSettings.SetConfigValue(Key, JsonUtility.ToJson(settings));
}
public static UserSettings Load()
{
var json = EditorUserSettings.GetConfigValue(Key);
try
{
return JsonUtility.FromJson<UserSettings>(json);
}
catch (Exception)
{
return null;
}
}
}
ショートカット
ツールランチャーはメニューからの起動だけでなく、ショートカット(cmd + T)でも開くことができます。

これはMenuItemにショートカットキーを指定することで実現しています。
[MenuItem("Window/ツールランチャー %t")]
public static void Open()
{
GetWindow<ToolLauncherWindow>(false, "ツールランチャー");
}
カスタマイズ性
ツールランチャーはユーザーが自由にツールを追加できるようにするため、ツール一覧をソースコードに埋め込むわけにはいきません。
これに対応するため、メニューアイテム付きのメソッド名をリフレクションで取得するというアプローチを取りました。
// MenuItemのAttributeがついたメソッドを全て探す
var result = new List<(string, MethodInfo)>();
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (var methodInfo in assemblies
.SelectMany(x => x.GetTypes())
.SelectMany(x =>
x.GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)))
{
var menuItem = methodInfo.GetCustomAttribute<MenuItem>();
if (menuItem == null) continue;
result.Add((menuItem.menuItem, methodInfo));
}
DropDownMenu
リフレクションで取得したメソッド一覧を選択するGUIとしてAdvancedDropdownを使用しています。
これはUnityのAddComponent時と同じようなメニューを表示する機能で、ここにMenuItemの階層を再現することで、ツール選択画面を使いやすくしています。

おわりに
ツールランチャーの機能とこだわりポイントを紹介しました。 簡単に利用できるので、是非使ってみてください。
ツールに関してフィードバックや改善提案があれば、Pull RequestやIssueを通してご連絡いただけると幸いです。







