強火で進め

このブログではプログラム関連の記事を中心に書いてます。

AssetStore.Open() の使い方

Unity の Asset Store のウィンドウはブラウザの画面(WebView)を表示してるだけだったりします。そして頑張れば自分のプログラムから呼ぶことが出来たりします。

こちらの動画では Asset Store のウィンドウに任意のWebページを表示しています。

Unite 2012 - Advanced Editor Scripting - Unity Videos
http://video.unity3d.com/video/6948005/0/unite-2012-advanced-editor

しかし、これは本当にマニアックな方法であまり誰にでもお勧め出来るものでは有りませんでした(※ Unity エディタ(IDE)に搭載されている機能を無理矢理呼び出してる様です)。

その様な状況が Unity 4.0 からは多少改善されました。 Asset Store のウィンドウを呼び出せるAPI、 AssetStore.Open() が追加されたのです。

けれども残念な事にこのAPIでは任意のURLが指定出来るわけでは無く、使えるURLはあくまで Asset Store のURLです。それでもまぁ、折角追加されたので使い方を解説しておきます。

まずはリファレンスを観てみましょう。

Unity Script Reference – AssetStore.Open
http://docs.unity3d.com/Documentation/ScriptReference/AssetStore.Open.html

うーん、びっくりするぐらい情報が無いですね。

次に AssetStore クラス自体のページを観てみましょう。こちらもかなり得られる情報は少ないですね。

Unity Script Reference – AssetStore
http://docs.unity3d.com/Documentation/ScriptReference/AssetStore.html

しかも、ここではスクリプトの先頭に using UnityEditor; を追加する様に書かれていますが、実際には using UnityEditorInternal; が正解だったりします。

この様に限られた情報を元に試行錯誤した結果なんとかメニューから指定のAssetのページを開くエディタ拡張を作る事が出来ました。プログラムはこちら。

C#のサンプル(FavoriteAsset.cs)】

using UnityEngine;
using UnityEditor;
using System.Collections;
using UnityEditorInternal;

public class FavoriteAsset : MonoBehaviour {

	[MenuItem( "Favorite Asset/Open" )]
	static void Open () {
		AssetStore.Open ("/content/5330");
	}
}

この AssetStore.Open() は引数の指定が中々厄介でした。

今回は「Mecanim Animation Starter Pack」を開くプログラムを作ろうと思い、Assetのページから「Open In Brower」を選択 → URLを確認 → AssetStore.Openの引数にそのURL(※)を指定という流れでプログラムを作ってみました。
※指定したURLは http://u3d.as/content/unity-technologies/mecanim-animation-starter-pack/3Bt

しかしこれは実行してみた所、 Asset Store のトップページが表示されるだけで Asset の個別ページが表示される事は有りませんでした。

次にブラウザに表示されたページの「Open Asset Store」ボタンがどの様なURLを開いているかを FireBug を使って調べてみました。

該当するHTMLはこちら

<a href="/content/5330" class="feature-download blue-btn" onclick="open_link(this); return false;">Open Asset Store</a>

ここの飛び先(href)に指定している相対URLを引数に指定した所、ちゃんと個別ページが表示されました。

ところで実は最初は今回紹介したのとは別プログラムを作っていました。そのプログラムは Start() で AssetStore.Open() を読んでいました。

このプログラムはエディタ上は上手く動作したのですがMacアプリにビルドしようとするとビルドの途中でエラーが発生しました。

エラーの内容は using UnityEditorInternal; の UnityEditorInternal が見つからないというもの。 UnityEditorInternal は名前の通り、エディタ(Editor)上でないと使えない様です。

この点を考慮し、最終的にはここで使用したプログラムとなりました。今回紹介したようなプログラムで有ればMacアプリにビルドしようとしてもエラーにはなりません。

この様に結構、使うのはメンドクサイですがもし良かったら皆さんも AssetStore.Open() を使ってみて下さい。