🌟

【clusterscriptの備忘録】お魚のクラフトアイテムを動かすclusterscript(難易度2)

2024/07/23に公開

https://zenn.dev/toko1219/articles/4334ac46efacee
上記にお魚のクラフトアイテムを動かすclusterscript(難易度1)を書きました。
今回は、難易度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)でエクスポートします。

エクスポート時のおすすめ設定はこちら。
https://creator.cluster.mu/2022/07/26/blender-unity/

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さんの「ワールドクラフトでなんちゃってアニメーション」で紹介されているスクリプトです。
https://zenn.dev/vins/articles/1e1370ddd6e516

Discussion