今回は「Rigidbody」について紹介します。
この記事ではUnityを導入しているけど「Rigidbody(リジッドボディ)」をまったく触ったことがないという方向けに、オブジェクトとRigidbodyを使ってclusterで遊べるワールドをつくるところまでを紹介します。

Rigidbodyは使い方次第で、ワールド内にさまざまな動きを取り入れることをできるので、ぜひ使い方を覚えてみてください。
Rigidbodyとは
RigidbodyとはUnityの基本機能として用意されているオブジェクトに付与できる物理特性のことです。これを使うことで物理シミュレーションが可能になります。
物理シミュレーションと言うと難しいですが、たとえば、誰かが操作しなくても、オブジェクトが落ちたり転がったりするようにできます。
Rigidbodyを設定する
Rigidbodyの設定は簡単です。
- まず「3D Object→Cube」でキューブを作成します。

- 次に作成したオブジェクトのInspectorから「Add Component」を選択、そこでCreator Kitのコンポーネント「Movable Item」を選びます。
すると自動的にRigidbodyが設定されます。
これで設定は完了です!
また、アイテムを掴んだり離したりできるようにできるコンポーネント「Grabbable Item」をつけた時もRigidbodyが自動的に設定されます。
Movable Item|Creator Kit ドキュメント
https://docs.cluster.mu/creatorkit/item-components/movable-item/
Grabbable Item|Creator Kit ドキュメント
https://docs.cluster.mu/creatorkit/item-components/grabbable-item/
※「Movable Item」をつけないとcluster上でプレイヤー同士での同期ができず、それぞれのプレイヤーによって見えているものが違うということが起きてしまいます。
※該当のコンポーネントと同じ階層もしくは子にはいずれかのColliderコンポーネントが1つ以上必要です。このコンポーネントが追加されているGameObjectおよび子のGameObjectにはレイヤーが自動的に設定されます。
この状態で再生ボタンを押して、Scene上で緑の矢印を選択して、上に持っていってみてください。

キューブが落下するようになりました!
また、このように斜面を用意して

斜面の上から落下させると

このようにキューブが転がっていきます!
また、Rigidbodyの設定を変えると挙動を色々と変えることも可能です。
下記に主な設定をまとめたので、参考にしてみてください。

※IsKinematicがオフのRigidbodyにMesh Colliderを適用するにはConvexチェックボックスをチェックする必要があります。Mesh Colliderの設定について詳しくはUnityマニュアルを参照してください。
Rigidbodyで積み木くずしができるワールドをつくってみる
今回はオブジェクトと「Rigidbody」を使って、キューブを積み木のように積んでつくった建物を崩すことができるワールドをつくります。
まず、clusterにワールドをアップロードできる環境を事前に用意してください。
準備はこちらを参考にしてください。
上記で紹介する方法以外ではテンプレートプロジェクトを利用するのがおすすめです。下記のページからテンプレートプロジェクトをダウンロードして、Unityで開くことで、clusterへアップロードする環境まで一気に準備することができます。
- まずは、「3D Object→Plane」で建物を配置する地面を用意しておきます。

- 次に「3D Object→Cube」で建物のベースとなるキューブを生成します。

このキューブは掴めるようにする必要はないので「Movable Item」を設定します。
- キューブを選択してInspectorの「Add Component」から「Movable Item」を選択します。
すると、下記のように「Rigidbody」も自動的についてますね。

- あとはこれを複製して、ひたすら積み上げていきます…!

ここで注意してほしいのは、キューブ同士は位置が重ならないように必ず離しましょう。
重なっていると…

盛大に飛び散ってしまいます。
キューブ同士は重ならずにピッタリくっつけるか少し離すようにしましょう。
数値で指定するか、キューブを選択して動かすかのどちらかで調整します。
tips
キューブを動かす時に「V」を選択した状態だとスナップができるようになります。
どんどん積んでいって、ある程度の高さになったら柱(のようなもの)の完成です。

- 柱(のようなもの)ごと一括でコピー&ペーストしてどんどん配置していきます。
ある程度配置できたら、1階部分の完成です!

- 同じように「3D Object→Cube」で2階部分の床をつくりましょう。
- つくった床にも「Movable Item」をつけておきます。

- あとはこれらのオブジェクを一括コピー&ペーストして上にどんどん積んでいきましょう!
よし積めた!と思ったら、再生して確かめましょう!

きれいに崩れましたね。
バランスが悪かったのでしょうか。物理シミュレーションだからこそ起こる予期せぬ挙動です。ある程度やったら再生して確かめてみましょう…
というわけで、1階ごとの高さがちょっと高すぎたみたいなので、低くしてみました。

今度は大丈夫そうです。

それでは、最後に建物を崩すために使う棒を用意しましょう。
- 「3D Object→Cube」でキューブを生成して、いい感じに引き伸ばします。
- 今度は持てるように「Add Component」から「Grabbable Item」を選択します。
※オブジェクトを掴める範囲を指定するため、Grabbable Itemコンポーネントと同じ階層もしくは子にはいずれかのColliderコンポーネントが1つ以上必要です。このコンポーネントが追加されているGameObjectおよび子のGameObjectにはレイヤーが自動的に設定されます。
これで準備は完了です(再生して下記のようにオブジェクトの周りに枠のようなものがついていればOKです)。

それではプレイしてみましょう。
掴めるようにした棒を柱にぶつけることで、柱を崩す(移動)することができます。
意外と倒れませんね。




もうちょっと攻めてみましょう。
お、おー…

きれいに崩れていきました!
というわけでオブジェクトとRigidbodyだけで簡単にワールドをつくってみました。
Rigidbodyを使うとこのように予期せぬ動きが起こせるようになります。
ワールドづくりにぜひ取り入れてみてください!