RECENT ENTRY
ARCHIVES
こんにちは!
Development Div.所属のHです。
今回の記事では
mGearで使用できる「animPicker」というツールの
“ちょっと便利”な使い方をご紹介します*
————————————————————————————————
※本記事は以下のバージョンを前提に執筆しています
mGear:4.2.0
animPicker:1.3.2
————————————————————————————————
mGearのanimPickerでは、
アイテムを「スクリプト実行ボタン」として設定する際に、
あらかじめ用意された便利な変数を使用することができます。


# Variable reference for custom script execution on pickers.
# Use the following variables in your code to access related data:
# __CONTROLS__ for picker item associated controls (will return sets and not content).
# __FLATCONTROLS__ for associated controls and control set content.
# __NAMESPACE__ for current picker namespace
# __INIT__ use ‘if not’ statement to avoid code execution on creation.
# __SELF__ to get access to the PickerItem() instace. (Change color, size, etc)
この中でも、特に使用頻度が高く便利な3種をご紹介します💡
__NAMESPACE__
__INIT__
__SELF__
1. __NAMESPACE__
この変数では、
スクリプト実行ボタンが配置されている
ピッカーノードのネームスペースを取得できます。
以下の画像では、
スクリプト実行ボタンを含むピッカーノードに
testNSというネームスペースが付与されています。

この状態で、スクリプト実行ボタンにprint(__NAMESPACE__)と記述して実行すると、
コンソールにtestNSという文字列がプリントされます。
つまり、実行ボタンがあるピッカーノードのネームスペースを取得できる
ということが分かります。
実際の使用例としては、
ピッカーノードをリグアセットに含めておき、スクリプト実行ボタン内で
test_function(__NAMESPACE__)の様に、
関数の引数としてネームスペースを渡す使い方が便利です。
こうしておくことで、
シーン内に同じリグアセットが複数リファレンスされ、
ネームスペースがナンバリングされた場合でも、
ユーザーが押したボタンに紐づくアセットのみを処理対象にすることができます◎
※ピッカーノードにネームスペースが付いていない場合、
返り値は空文字列ではなく None になる点に注意してください
2. __INIT__
こちらは基本的に、ほぼ必須で使用する変数です。
スクリプト実行ボタンの記述を
if not __INIT__:
という if 文で囲むことで、
ボタンを押したタイミングでのみスクリプトが実行されるようになります。
(右クリックメニューのアイテムの場合は、項目をクリックしたタイミングです)
if not __INIT__:
print(__NAMESPACE__)

一方で、この if 文を記述しない場合、
ピッカーが立ち上がったタイミングで自動的にスクリプトが実行されます。
これは、スクリプトやパッケージのリロード処理などを行いたい場合に便利です!

■ __SELF__
__SELF__を使うと、
対象となっている PickerItem 自身にアクセスできます。
(色やサイズの変更等、様々な操作が可能です)
今回はその一例として、
アイテムに表示されるテキストを動的に変更する方法を紹介します。
例えば、ピッカー内に「タイトル用」として文字だけのアイテムを配置している場合、
ピッカーノードにネームスペースが付いた際に
そのネームスペースをタイトル表示にも反映させることができます。
以下は、
ネームスペースが無い場合は「Cloth」、
ネームスペースが付いた場合は「ネームスペース : [Cloth]」
と表示する記述例です。


item_text = “Cloth”
if __NAMESPACE__:
item_text = “{}:[Cloth]”.format(__NAMESPACE__)
__SELF__.set_text(item_text)
ピッカーノードにネームスペースが付くと、
表示されるテキストにもネームスペースが反映されます。

このようにタイトル用アイテムを設定しておくことで複数アセットが存在し、
ネームスペースがナンバリングされているような状況でも
ユーザーがどのアセットのピッカーを操作しているのかを
視覚的に把握しやすくなります👀
最後までお読みいただき、ありがとうございました:)
また便利な使い方やTipsがあれば、紹介します💻✨