「空飛ぶ魔法のじゅうたん」をつくってみる

投稿者:

「Creators Guide」は、メタバースプラットフォーム「cluster」で「つくる」ことにチャレンジしてみたい方に向けた導入ガイドです。

Creators Guideで読むことができるすべての情報はこちらにまとめています。


目次

今回つくるもの

今回はCCK v1.14.1で追加された乗り物機能を用いて、比較的簡単につくれる「空飛ぶ魔法のじゅうたん」をつくる方法を紹介します!

空を飛ぶ乗り物はテンプレートワールドにありますので、体験してみたい方はぜひこちらのワールドへ!

また、テンプレートワールドは自由に使えるUnityプロジェクトとして配布されています。まずはサンプルを触ってみたい方はこちらの記事へ!

事前準備

まず、clusterにワールドをアップロードできる環境を事前に用意してください。

すぐに準備したい方は下記の記事を参考にテンプレートワールドを導入するのがおすすめです。

一から準備をしたい方はこちらを参考にしてください。

じゅうたんを用意して、うまく座れるようにする

まずはじゅうたんとなるオブジェクトを用意して、座れるようにしていきます。

  • 今回は「3D Object / Cube」から Cube を作成します。
  • Cubeをじゅうたん代わりにするために、大きさをX 1.5、Y 0.1、Z 1に変更して薄くします。

オブジェクトに座れるようにしていきます!

  • Cube に Add Component から「Ridable Item」を追加します。

次はSeatとLeft Grip、Right Gripを設定していきます。
Seat は乗っているアバターの位置や回転を指定するTransformを設定します。
Left Grip、Right Gripは、乗っているアバターの手の位置を指定するTransformを設定します。

まずは座る位置を決めるためにSeatを設定していきましょう!

  • 「Create Empty」から空のオブジェクトを作成します。
  • 名前を sitPosition に変更し、Cube の天面から+0.10 m 高く、座る位置の側面から 0.10 m 内側に配置します。
    この値であれば、デフォルトアバター・オフィシャルアバター・一般的な体型の人型アバターで座った際に、座るアイテムに体が埋まることなく利用できます。

ここで一度アップロードして確認してみましょう。

アバターがじゅうたんにのるようになりました!

次に少し工夫を入れてみます。アバターがじゅうたんをつかむようにLeft Grip、Right Gripを設定して、手の位置を調整します。

  • sitPosition を複製して、leftGripPosition、rightGripPositionを作成します。

アバターの両脇に手を置くようにするために、アバターの横から離す距離、持ち手の傾きを変更します。

  • leftGripPosition は、アバター横からPositionのXを -0.20に配置 、RotationのZを -90にします。rightGripPosition は、アバター横からPositionのXを +0.20に配置、RotationのZを +90にします。

ここでもう一度アップロードして確認してみましょう。
アバターがじゅうたんに手を付けてのるようになりました!!

水平移動をできるようにする

次はじゅうたんで水平移動できるようにします。
Cube に Add Component から「Steer Item Trigger」、「Add Continuous Force Item Gimmick」、「Add Continuous Torque Item Gimmick」を追加することで、水平移動ができるようになります。ひとつひとつ解説していきます!

各コンポーネントで使用するプロパティを順番に確認します。

  • Steer Item Trigger|Creator Kit ドキュメント
    乗っているアイテムに「操作する」機能を追加し、操作されたことを通知するトリガーです。矢印キーといったじゅうたんの操作ボタン入力を他のコンポーネントに通知します。
  • Add Continuous Force Item Gimmick|Creator Kit ドキュメント
    アイテムに持続的な力を加えるギミックです。前後操作の通知を受け取り、Cubeを前進・後進させます。
  • Add Continuous Torque Item Gimmick|Creator Kit ドキュメント
    アイテムに持続的なトルク(回転力)を加えるギミックです。左右操作の通知を受け取り、Cubeを右回転・左回転させます。

まずはSteer Item Triggerから設定していきます!
移動入力によって Steer Item Trigger から move という二次元ベクトルのメッセージを送信するようにします。

  • TargetをThisにして Keyを move にしてください。Valueは Input: Vector2 としてください。

ValueをInput:Vector2を設定することで、二次元の移動入力を通知することができます。

そのため、このmoveはX軸とY軸をもつ二次元ベクトルのメッセージになります。moveの後ろに 「.x」、「.y」をつけることでX軸、Y軸を指定することができます。move.xは左右の値を、Y軸のmove.yは前後の値を持っています。

移動入力はアイテムに乗っていない時の移動入力と同様です。

Add Continuous Force Item Gimmick がこの move.y メッセージを受け取ることで前進・後進するように設定します。

  • TargetはThis、Keyは move.y、Parameter Typeは Floatとしてください。
  • 前進・後退させるために、ForceのZに 2 を入力してください。

Add Continuous Torque Item Gimmick がこの move.x メッセージを受け取ることで左回転・右回転するように設定します。

  • TargetはThis、Keyは move.x、Parameter Typeは Floatとしてください。
  • 左右回転させるために、TorqueのYに 0.25 を入力してください。

ここで一度アップロードして、どういう操作になるか確認してみましょう。
じゅうたんが水平移動するようになりました!

上昇・下降ができるようにして空を飛べるようにする

最後にじゅうたんで空を飛べるようにします。
具体的にはCube に Add Component からさらに「Add Continuous Force Item Gimmick」を追加して、じゅうたんを上昇・下降させます。

  • Steer Item Triggerの追加入力によって additionalAxisというメッセージを送信するようにします。Valueは Input: Float にしてください。
  • 追加入力はプラットフォームによって異なります。
    • モバイル版では右下に表示される上下ボタンを押す
    • VR版では右手のコントローラーの上下入力
    • デスクトップ版ではスペースキー・左シフトキーを押す

Add Continuous Force Item Gimmick がadditionalAxisのメッセージを受け取ることで、上昇・下降するように設定します。

  • TargetをThis、KeyをadditionalAxis、Parameter Typeは Float にするのを忘れないようにしてください。
  • 上昇・下降するようにForceのYに 2 を入力します。

ここで一度アップロードして、どういう操作になるか確認してみましょう。
じゅうたんが空を飛べるようになりました!

最後にじゅうたんが傾きすぎないようにY軸だけ回転するようにします。

  • Inspector にある Rigidbodyの項目にある、Constraints → Freeze Rotation → X軸・Z軸にチェックマークをつけます。

座れるアイテムに、合計4つのコンポーネントだけを追加することで「空を飛ぶ」アイテムをつくることができました!
みなさんもワールドにあった「空を飛ぶ」アイテムを追加してみてはいかがでしょうか?


最後に公式による記事や多くのクリエイターの皆さんによるドキュメントやコミュニティを紹介します。
ぜひ活用して自分だけのワールドを制作してみましょう!

▼ 「Cluster Creator Kit」の全てが分かる公式ドキュメント
Cluster Creator Kit ドキュメントhttps://docs.cluster.mu/creatorkit/

▼ クリエイターによる投稿記事まとめ
ワールド制作部https://note.com/cluster_official/m/m1fd772ab8f45
アバター制作部https://note.com/cluster_official/m/m6b18e343f35c
イベント制作部https://note.com/cluster_official/m/m7155e6f6887f

▼ 分からないことがあればコミュニティを活用してみましょう!
Cluster Creator Community Discord
https://discord.gg/DHQmAfDhkt