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

空を飛ぶ乗り物はテンプレートワールドにありますので、体験してみたい方はぜひこちらのワールドへ!
また、テンプレートワールドは自由に使えるUnityプロジェクトとして配布されています。まずはサンプルを触ってみたい方はこちらの記事へ!
じゅうたんを用意して、うまく座れるようにする
まずはじゅうたんとなるオブジェクトを用意して、座れるようにしていきます。
- 今回は「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つのコンポーネントだけを追加することで「空を飛ぶ」アイテムをつくることができました!
みなさんもワールドにあった「空を飛ぶ」アイテムを追加してみてはいかがでしょうか?