【clusterscriptの備忘録】お魚のクラフトアイテムを動かすclusterscript(難易度2)
今回は、難易度2のスクリプトを記載します。
blenderを使用したことがあり、unityを使ってクラフトアイテムをclusterにアップしたことがある方向けの記事です。
難易度2:★★
■お魚をピチピチさせながらぐるぐる泳がす。
難易度1でも使用した、cluster 2022年9月のお題企画:「アクアリウム」を作ろう! で配布されていたお魚のアイテム、「fish_C」をblenderで加工します。そして、clusterscriptでお魚をピチピチさせながらぐるぐる泳がせます。
1.blenderを開き、不要なライトやCubeは削除しておきます。
ファイル>インポート>FBX(.fbx)で「fish_C」をインポートします。
「fish_C」のモデルは、以下のフォルダにあります。
Odai-Sep2022\Odai-Sep2022\Assets\Odai-Sep2022\models\fish_C.fbx
インポート出来たら、-xが顔の正面になるように、Rを押して回転させておきます。
2.モデルの名称を「mono0」に変更します。
3.「mono0」を複製して、「mono1」「mono2」を作ります。
4.「mono0」を編集します。
mono0を選択します。
右上を「オブジェクトモード」から「編集モード」に変更し、中央上のプロポーショナル編集をON、左上のワイヤーフレームを設定します。Z軸を正面にします。
Rを押して、お魚の尾びれの方、体半分をねじります。
Gを押して、お魚の形を整えます。
5.「mono2」を編集します。
一度「オブジェクトモード」に戻り、「mono2」を選択します。
右上を「オブジェクトモード」から「編集モード」に変更し、中央上のプロポーショナル編集をON、左上のワイヤーフレームを設定します。Z軸を正面にします。
そして、手順4の「mono0」とは逆の方向に、体半分をねじります。
RとGを使って、お魚の形を整えてください。
「オブジェクトモード」に戻ると、こんな感じで3つのお魚ができているはずです。
6.お魚「mono0」「mono1」「mono2」をエクスポートします。
お魚「mono0」「mono1」「mono2」を全部選択し、ファイル>エクスポート>FBX(.fbx)でエクスポートします。
エクスポート時のおすすめ設定はこちら。
7.手順6でエクスポートしたお魚をunityに持ってきます。
unityでアイテムに、Movable ItemとScriptable Itemをつけます。
8.Scriptable ItemのSouse Codeに、以下のスクリプトを記載します。
const monoAr = [];
const monoNum = 4;
const speed = 40.0;
const changeSpeed = 4.0;
const axis = new Vector3(0.0, 1.0, 0.0);
for (let monoNo = 0; monoNo < monoNum; monoNo++) {
monoAr.push($.subNode("mono" + monoNo));
}
$.onUpdate((deltaTime) => {
$.setRotation($.getRotation().multiply(new Quaternion().setFromAxisAngle(axis, speed * deltaTime)));
if (!$.state.initialized) {
$.state.tick = 0;
$.state.currentNo = 0;
$.state.initialized = true;
}
$.state.tick += deltaTime * changeSpeed;
if ($.state.tick >= 1.0) {
$.state.tick -= 1.0;
monoAr[$.state.currentNo].setEnabled(false);
$.state.currentNo = ($.state.currentNo+1)%monoNum;
monoAr[$.state.currentNo].setEnabled(true);
}
});
9.Item(Script)のItem Nameに好きな名前を入力し、Sizeも入力します。
10.Prefab化します。Original Prefabをクリックします。
11.「mono0」「mono1」「mono2」にお好きなテクスチャをつけてください。
12.「mono1」を複製し、「mono3」という名称にしてください。
13.「mono0」「mono1」「mono2」「mono3」のPositionをY:1、Z:1に設定します。
14.クラフトアイテムアップロードしましょう。
15.clusterのワールドに置いてみてください。
unityだと、アニメーションでお魚を動かすことができるのですが、clusterのクラフトアイテムでは現状アニメーションはつけられません。
そこで、形の違う「mono0」「mono1」「mono2」「mono3」の4種類のお魚を用意して(実際はmono3はmono1のコピーなので用意したのは3つですが)、「mono0」「mono1」「mono2」「mono3」を配列に入れ、順番に表示そのほかを非表示にする動作を繰り返し行います。その切り替えによってピチピチしている様子を作り出しています。
レベル1のときのスクリプトが以下です。
手順8のスクリプトと比較して追加された部分が、ピチピチさせる動作を作り出しているスクリプトです。
const speed = 72.0;
const axis = new Vector3(0.0, 1.0, 0.0);
$.onUpdate(deltaTime => {
$.setRotation($.getRotation().multiply(new Quaternion().setFromAxisAngle(axis, speed * deltaTime)));
});
元は、vinsさんの「ワールドクラフトでなんちゃってアニメーション」で紹介されているスクリプトです。
Discussion