こんにちは、スタジオチームのn_mattun(まっつん)です。
普段はclusterを用いたイベントの快適な体験環境とイベント進行環境を作るためであれば
人力/ハード/ソフトと技術領域は問わず、お助けになれるようなことは色々と何でもやってるマンです。
今日はClusterScriptを叩いていた折に見つけた、すぐに使える便利Tipを1つご紹介します。
Textコンポーネントをstatic変数風に使う
というわけでタイトル通りなんですが、先にUnityプレビュー時※のスクショをお見せします(※UnityプレビューはCSEmulatorを使用しています)
これがどういう事をやってるかというと、
- Item自身が抱えるUnityのTextコンポーネントにアクセスし、その中のテキストをClusterScriptで取得する
- 中の文字列がjsonフォーマットであれば、文字列そのままJSON.parse()※で展開できる
- 展開した変数群をClusterScript内でよしなに活用する
※JSON.parse()は、JavaScriptのECMAScript標準に属するメソッドで、JSON形式の文字列をJavaScriptのオブジェクトや配列に変換します。ClusterScriptはECMAScript準拠で動いている言語なのでJSON.parse()も使えます。
ということをやっています。
コードはこれだけで、同じスクリプトを3つのCubeに差し込んでいます。
$.onStart(() => {
let jsonString = $.getUnityComponent("Text").unityProp.text;
let JsonValue = JSON.parse(jsonString);
let pos = new Vector3(JsonValue.Position[0], JsonValue.Position[1], JsonValue.Position[2]);
let rot = new Vector3(JsonValue.Rotation[0], JsonValue.Rotation[1], JsonValue.Rotation[2]);
$.setPosition(pos);
$.setRotation(new Quaternion().setFromEulerAngles(rot));
});
これができて何が嬉しいかというと、同じ役割を果たす物体に対してパラメータが違うだけでほとんど同じ動きをするClusterScriptをセットしたいんだけど、それのためだけに変数の値だけが変わっててそれ以外は同じ内容のスクリプトを複製するのとかめっちゃ不毛・・・! みたいな場合に役立ちます。
もちろん、それぞれの物体に対してIDを割り当てるだけでもかなり使い出もあります。渡せる値はjsonで渡せるので、変数の数もいくら並べてもOKだし、階層を深くしてもOKです。しっかりとClusterScriptを叩きこんでいる人ほど「これは便利なやつ!!」と喜んでくれるんじゃないかなと思います。
それではみなさん引き続き、良きclusterクリエイターライフを!
