コンテンツへスキップ

QualiArtsengineer blog

Unity向けツールランチャーを公開しました!

Unity向けツールランチャーを公開しました!

4 min read

はじめに

株式会社QualiArtsの今井です。テクニカルアーティストとしてIDOLY PRIDEのライブシステムの設計や、ツールの開発をしています。

本記事はQualiArts Advent Calendar 2023の2日目の記事です。

1日目の記事は# モバイルゲーム開発の現場におけるテクニカルアーティストでした。

今回は実際にテクニカルアーティストが作成したツールで、社内で広く活用されているUnityのツールランチャーを公開します。

また、公開に際して機能の説明とこだわりポイントを紹介します。

リポジトリ

本記事で紹介するツールランチャーはGitHubで公開しており、プロジェクトに導入を検討している方はこちらのリンクをご覧ください。

https://github.com/QualiArts/UnityToolLauncher

機能一覧

ツールランチャーの主な機能を以下に紹介します。

ツールランチャーの画面

ツールを開く

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

GATSBY_EMPTY_ALT

ヘルプを開く

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

GATSBY_EMPTY_ALT

ツールの追加・カスタマイズ

チームや個人で自作したツールも追加可能です。

GATSBY_EMPTY_ALT

プリセット

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

GATSBY_EMPTY_ALT

設定方法

それぞれの設定方法は以下の通りです

設定項目画像説明
略称                                                                                                                                 アイコンとして表示される略称を指定します
名前 ツールの名前を指定します
説明 ツールの説明を記入します
説明ページのURL(省略可) ツールのマニュアルがあるURLを表示します。省略した場合はボタンが表示されなくなります
起動ツール 起動ツールの設定方法を参照

起動ツールの設定方法

起動ツールを指定するにはツール検索ボタンを押して、ツールを選択します。

例 ) Light Explorerを指定する場合

ツール検索ボタンからLight Explorerを指定します。

GATSBY_EMPTY_ALT

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

GATSBY_EMPTY_ALT

ツールを作ったきっかけ

ゲーム開発において、QualiArtsでは多くのツールを使用し、場合によっては独自ツールを開発します。

これらのツールは作業を効率化することに役立ちますが、数が増えるにつれて、管理やアクセスが煩雑になり、せっかく作ったツールが使われない・チームで共有されないといった問題が発生しました。

そこで、制作した独自ツールを最大限活用するためのツールランチャーが必要になりました。

簡単な操作でツールを素早く開けるだけでなく、ヘルプページへ簡単にアクセスできる機能や日本語での説明文など、チームで使われることを意識した設計にしました。

こだわりポイント

使いやすくするためにこだわったポイントを紹介します。

最後に開いていたプリセットの保持

ツールランチャーを開いた時、最後に開いていたプリセットが表示されます。

GATSBY_EMPTY_ALT

これは 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[GATSBY_EMPTY_ALT] 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));
}  

リフレクションで取得したメソッド一覧を選択するGUIとしてAdvancedDropdownを使用しています。

これはUnityのAddComponent時と同じようなメニューを表示する機能で、ここにMenuItemの階層を再現することで、ツール選択画面を使いやすくしています。

おわりに

ツールランチャーの機能とこだわりポイントを紹介しました。 簡単に利用できるので、是非使ってみてください。

ツールに関してフィードバックや改善提案があれば、Pull RequestやIssueを通してご連絡いただけると幸いです。

https://github.com/QualiArts/UnityToolLauncher

2019年に株式会社サイバーエージェントに入社、テクニカルアーティストとしてライブシステムや、Unityツールの開発を担当