Unity Asset Portal beta

menu

アドバンスドアセットストア講座: 機能拡張系アセットをより便利に使う

執筆者:一條貴彰
2018.02.19

※Unity Asset Storeチーム注;
ProBuilder Basicは Unityへの統合を前提として 2018年2月15日に Unity Technologiesをパブリッシャーとして ProBuilderの名称でリリースし直しました。これに伴い、アセット名称やスクリーンショットなどはそのままに、本文中のリンク先を新しいURLに差し替えています。

 

本稿では購入してプロジェクトに導入したアセットをより便利に使うためのTipsを紹介します。

エディタ拡張で機能の呼び出しを楽にする

Unityには、「エディタ拡張」という機能があります。これは、Unityエディタの機能をスクリプトによって独自に拡張できるシステムです。
これを活用して「自分だけのアセット呼び出しメニューリスト」を作ると、アセットの活用がより効率的になります。Unityのメニュー画面から機能を呼び出すためのエディタ拡張スクリプトは、以下のように記述します。

using UnityEngine;
using UnityEditor;

public class MenuExpansion : EditorWindow
{
    [MenuItem("GoodAssetA/DoIt")]
    static void DoIt()
    {
        EditorUtility.DisplayDialog("Do it", "Just do it !!!", "OK");
    }
}

呼び出したいメソッドをStaticで作成し、属性(Attribute)として[MenuItem( 階層名 )]をつけます。上記の例では、メニュー「GoodAssetA」に「DoIt」要素が追加され、クリックするとDoIt()の内容が実行されます。

UnityEditorに独自の機能呼び出しメニューを作る

なお、エディタ拡張のためのスクリプトは、”Editor”という名前のフォルダの中にある必要があります。Editorフォルダは、UnityのエディタAPI(UnityEditor.dll)を利用するスクリプトのための特別なフォルダです。なお、”Editor”という名前であれば Assets/直下に配置されている必要はありません。たとえばAssets/SomeAsset/Tools/Editor でも大丈夫です。

何かの拍子にスクリプトファイルをEditorフォルダの外に出してしまうと、ビルド時に

Error building Player because scripts have compile errors in the editor

というエラーメッセージが出て失敗してしまいますので、注意しましょう。

右クリックメニューやホットキーでアセットの機能を呼び出す

機能拡張系のアセットの中には、ゲームオブジェクトやプレハブをシリアライズ化したり、変換・圧縮したりするものがあります。
先ほど紹介した「メニューから機能を呼び出すエディタ拡張」で、シーンの中のゲームオブジェクトに対して何か動作をさせる場合、ヒエラルキー上の右クリックメニューから呼び出せるようにすると、より便利になります。

ヒエラルキー上の右クリックメニューに追加する場合は、下記のように記述します。

[MenuItem](GameObject/Create Other [パス] / [関数名])

たとえば「DoIt」という機能を呼び出したい場合は次のように書きます。

using UnityEngine;
using UnityEditor;

public class MenuExpansion : EditorWindow
{
    [MenuItem("GameObject/Create Other/DoIt")]
    static void DoIt()
    {
        EditorUtility.DisplayDialog("Do it", "Just do it !!!", "OK");
    }
}

ヒエラルキー上の右クリックメニューからアセットの機能を呼び出す

同様にして、プロジェクト内のプレハブやアセットに対して動作させるものは、次のようにすると設定できます。

[MenuItem](Assets/ [パス] / [関数名])

ショートカットで呼び出したい場合は、同じくMenuItemアトリビュートで”KeyRemap”を指定します。

[MenuItem](KeyRemap/ [パス] / [関数名] [キー])

たとえば「Alt + o」で呼び出したい場合は次のように書きます。

using UnityEngine;
using UnityEditor;

public class MenuExpansion : EditorWindow
{
    [MenuItem("KeyRemap/DoIt &o")]
    static void DoIt()
    {
        EditorUtility.DisplayDialog("Do it", "Just do it !!!", "OK");
    }
}

ホットキーの組み合わせは次の通りです。

記号 対応するキー
% Windows: Ctrl キー、macOS: Cmd キー
# Shift キー
& Alt キー
_ キー修飾子なし(1個のキーだけ)

もとからエディタ拡張を利用しているアセットの場合

アセットストアの機能拡張系アセットは、このエディタ拡張をはじめから活用しているものが多くあります。

エディタ内でポリゴンモデルが作成可能になる「Pro Builder Basic」は、導入すると次の独自メニューが追加されます。

Editor拡張:ProBuilderBasicの例

”Editor” フォルダは下記の位置にあります。

Editor拡張:ProBuilderBasicのフォルダ位置

エディタ拡張機能を使ってメニューバーに機能を追加している場合、メニューバー上に直接アセット名が追加されるものと、「”Tools/”」下に配置されるものなど、アセットによって異なります。これを、自分の好みの位置に変更することができます。

[MenuItem("GoodAssetA/DoIt")]

などと記述されていた時は、

[MenuItem("Tools/GoodAssetA/DoIt")]

のように変更すると、Tools以下のメニューから呼び出せるようになります。
また、導入しているアセットが多い場合は、”Audio Tools”, “Effect Tools”など、カテゴリごとに独自のメニュー階層を作ると、見通しがさらに良くなります。

注意:スクリプト系のアセットの改造について

アセットストアに販売されているスクリプト系のアセットについては、プロジェクトのスクリプトファイルを編集することは極力控えましょう。アセットの機能追加やバグ修正、仕様変更があった場合にアセットのバージョンアップができなくなってしまいます。
変更は最小限にとどめ、機能拡張は派生クラスや拡張クラスを作るなどで対処するとよいでしょう。

ただし、どうしてもアセットを自分で改造しなくてはならない場面もあります。それは、必要なアセット同士が競合してしまったときです。

アセットが継続的にUnity Editor APIを使って何らかの処理を実行している場合や、異なるAndroidのAPIレベルに依存するもの、メソッド名が衝突するものなど、予期せぬ競合が発生することがあります。そうした場合は、アセットの作者にレポートを送りつつ、調整を行いましょう。

まとめ

アセットストアで販売されている機能拡張系アセットは、自分好みにカスタマイズすることでさらに便利になります。ただしやりすぎは禁物です。
自分好みのショートカットやメニューを作り上げて、ゲーム開発を高速化しましょう!

この記事を書いた人

一條貴彰

一條貴彰株式会社ヘッドハイ 代表取締役

ゲーム作家・Game DevRel。小規模ゲーム開発者がもっと活躍できる世の中作りを目指して、ゲーム開発ツール・サービス専門のDeveloper Relation事業を行っています。ゲーム作家としての代表作は『Back in 1995』(Steam)。