アイテムを元の位置に戻すギミックをつくる

ワールドに置いたアイテムが、遊んでいるうちにあちこちに散らかってしまって困ったことはありませんか?

今回はそんなときに役立つ、「アイテムを手放すと元の位置に戻るギミック」の作り方を紹介します!

事前準備

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

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

はじめてのワールド作成

上記で紹介する方法以外ではテンプレートプロジェクトを利用するのがおすすめです。下記URLからテンプレートプロジェクトをダウンロードして、Unityで開くことで、clusterへアップロードする環境まで一気に準備することができます。
テンプレートワールドって何?って方はこちらの記事で導入方法を解説しているので、ぜひご覧ください。動画でも解説しています。

手で持てるアイテムをつくる

まずは普通の「手で持てるアイテム」をつくります。
※アイテムについてはこちらの記事でも解説しています。

  • Hierarchyを右クリック、または上部メニューのGameObjectからCreate Emptyで新しいゲームオブジェクトをつくりましょう。
  • 名前は「Item1」としておきます。
  • Item1を右クリックして3D Object>Cubeを追加します。Cubeの大きさはTransformのScaleで調整しましょう。
  • Item1を選択してInspectorを開きます。Add ComponentからGrabbable Itemを追加してください。

これでCubeを手に持てるようになりました。アップロードして確認しましょう。

手放すと元の場所に戻るようにする

On Release Item Trigger」と「Warp Item Gimmick」を使って、手放したアイテムが元の場所に戻るようにしてみましょう。

  • Item1にAdd ComponentでOn Release Item Triggerを追加します。これは手で持てるアイテムを手放したときに反応するトリガーです。
  • On Release Item Triggerの+ボタンを押してKeyを追加します。
  • Targetは「This」、Key名は「Release」、Typeは「Signal」としておきます。
  • 次にWarp Item Gimmickを追加します。こちらはSignalを受け取ってアイテムを指定地点までワープさせるギミックです。
  • トリガーに合わせてWarp Item GimmickのTargetを「This」、Keyを「Release」とします。
  • Warp Item Gimmickにはワープ先の指定が必要です。先にワープ先となる空のGameObjectを作成しておきます。名前は「WarpTarget」としておきましょう。

※Item1の子ではなく、別のオブジェクトとして作成します。以下の例は間違いです。

  • 作成できたらItem1のInspectorでWarp Item GimmickのTarget TransformにWarpTargetをドラッグアンドドロップするか、◎ボタンからWarpTargetを選択しましょう。

このワープ先オブジェクトをItemと同じ位置に設定してもいいのですが、そうすると複数のアイテムにワープ機能を持たせた場合に個別にワープ先が必要となってしまいます。
そこで、ワープ先をDespawn Heightより下に配置するというテクニックをご紹介します。

clusterのワールドには「Despawn Heightより下に移動したアイテムは初期位置に戻る」という仕組みがあります。そのためWarp Item GimmickDespawn Heightより下に移動させれば自動的に元の位置に戻すことができます。
この方法であれば複数のアイテムにも共通で同じワープ先を指定できるので無駄がありません。

WarpTargetをDespawn Heightより下に移動出来たら、アップロードして確認しましょう。アイテムを手放した瞬間に元の場所に戻るはずです。

手放すと一定時間後に元の場所に戻る

操作ミスで手放してしまった場合や他の人に手渡す場合など、手放した瞬間にワープすると困ってしまう場合もあります。
そこで、タイマーを使って手放してから一定時間後に元の場所に戻るようにしてみましょう。

  • まず、Item1にItem Timerコンポーネントを追加します。
  • Targetを「This」、Keyを「Release」としておきましょう。
  • Delay Time Secondsに手放してから元の場所に戻るまでの秒数を指定します。ここでは3秒とします。

Item Timerの+ボタンを押してタイマーから発行するKeyを追加します。
Key名は「Warp」、Typeは「Signal」としておきます。

最後に、Warp Item GimmickのKeyを「Warp」に変更しましょう。

これで完成です。アップロードして試してみましょう。
アイテムを手放してから3秒後に元の場所に戻るはずです。

持ったままログアウトしたときにも元の場所に戻る

アイテムを持っている人がそのままログアウトしてしまった場合、On Release Item Triggerは反応しません。
もうひと手間加えて、こういった場合にも自動で元の場所に戻るようにしてみましょう。「アイテムを持っている人がログアウトした」は「On Receive Ownership Item Trigger」で検出できます。

On Receive Ownership Item Triggerはアイテムのオーナーが切り替わったことを検出するトリガーです。
オーナーとは「アイテムを最後に持った・使った人」と思ってもらえればいいかと思います。

オーナーがログアウトした場合、そのワールドにいる別の人に自動でオーナーが切り替わるため、アイテムを持っている人がログアウトしたことを検出することができます。
※オーナーについてはこちらの記事で解説しています。少し踏み込んだ内容ですが、興味のある方は読んでみてください。

  • Item1にOn Receive Ownership Item Triggerを追加します。
  • Event Typeを「Involuntary」に設定したうえで、+ボタンを押してKeyを追加します。
  • On Release Item Triggerと同様に、Targetは「This」、Key名は「Release」にしましょう。

アップロードしてお友達と一緒に試してみてください。アイテムを持った人がログアウトした3秒後に元の位置に戻るはずです。

アイテムを自動で片付ける仕組みがあれば、長時間遊んでいても散らかることがなく快適に過ごすことができます。
みんなで遊べるワールドにはぜひ組み込んでみましょう!

記事をシェアしてワールド制作を盛り上げよう!