ボタンを押したら別ワールドへワープするギミックの作り方。

なっとうまきです。相変わらずワールド制作部を勝手にやってます。
楽しいですよね、ワールド制作。

はじめに

ワールド作ってる時に、ふと
ワープポータルってこう、SFチックじゃないですか。
そういうSFチックなワールドなら良いんですが、そうじゃないワールドだとなんか違和感ですし
かと言って、透明にしてゲートを配置することも出来ますが、誤って突っ込んで、意図しない移動が発生してしまうのもよく有りません。(地味にワールド間移動は重たいので。)
ではどうするか・・・
簡単です「このワールドに行くためにボタンを押す」というUI上の導線を作ってあげればよいのです。いいですねー!やりましょう!

実装をしていきます

と、言いつつですね・・・ボタンを押してワールド間ワープというのはClusterでは2つギミックを使う必要があります。

どのギミックを使うのか、どうして2個ギミックを使い分ける必要があるのかについて説明します。

どのギミックを使うのか

World Gate:アイテムに当たるとワールド間でワープします。
Warp Player Gimmick:アイテムを使うとワールド内ワープが出来るギミック

それぞれ以下の記事で解説しているので一読してみてください
1. 複数のシーンをつくる時に便利!プレイヤーをワールド内でワープさせるギミックをつくる - Cluster Creators Guide:Warp Player Gimmickの説明
2. ワールドを移動する - note:World Gateの説明

これらのギミックを使って実装していきます。

どうして2個使うのか

まず、ワールド間移動ができればいいので、World GateをInteract Item Triggerで起動できればよいのですが
残念なことに、WorldGateはそういういい感じの機能は持ちません。
WorldGateに入ってきた(当たり判定に当たった)人をとにかく

「よくわからんが、この人をXXさんのワールドにワープ!ヨシッ!」

というように横流ししていくヤツです。
これでは「誤ってゲートに入った人」がかわいそうです。

そのため、ボタンを押したら~の制御をするためにWarpPlayerGimmickも併用します。
WarpPlayerGimmickの方は、ボタンを押したらWarpPlayerGimmickを発動した人は転送するというロジックを組み込めます。

さて、ここまでは文字で説明しましたが、ちょっと絵も使います。
登場人物は3人(?)です。

1. ワールドにいる人
2. ワールド内ワープギミック(WarpPlayerGimmick)
3. ワールド間ワープポータル(WorldGate)
こんな感じのストーリーになります。

画像1

ワールドにいる人がボタンを押します。そうすると、WarpPlayerGimmickが発動してWorldGateが置いてある空間にワープします。

画像2

転送された次の瞬間、WorldGateの当たり判定が効いて、ワールド間ワープが実行されます。

画像3

画像4

ね?簡単でしょ?

WorldGateの設定

設定をする前に、旅館のワールドを紹介します。
今作っているワープギミックは、このワールドに実装されているものです。

露天風呂付き客室 - Cluster

さて、このワールドの裏側の話になりますが、実はエレベーターが3つあります。

こんな感じです。

画像7

で、これら3個が何にどう使われるかというと、扉の開いている左側のエレベータは利用者が実際に外部から乗り込めるエレベータです。

画像6

右側2つは、WorldGateになっています。
押したボタン(ワープ先)に応じてプレイヤーが右側の上下どちらかのエレベータに転送されて、対応するワールドへワープする。と言った流れになっています。

WorldGateのコライダーは右側の枠のような大きさで目一杯広げて
転送されてきたプレイヤーが必ずコライダーに当たるようにしています。

画像8

整理するとこんな感じです。

画像9

一旦このあたりで WorldGateの説明は切り上げます(また、少しだけ出てきます)

WarpPlayerGimmickを設定してみる

とりあえず、このあたりを参考に、WarpPlayerGimmickを組みます。

1. 複数のシーンをつくる時に便利!プレイヤーをワールド内でワープさせるギミックをつくる - Cluster Creators Guide:Warp Player Gimmickの説明

画像5

ここで重要なのは、InteractItemTriggerはOwnerに対してシグナルを飛ばします。
そして、受け取り側のWarpPlayerGimmickはPlayerからシグナルを受け取るように設定します。

そして、転送先を表すTargetTransformですがこれはまだ設定されていません。

TargetTransformに設定するためのオブジェクトは空のオブジェクトでよいです。WorldGate(エレベータの中心)の中心部分に、配置しておきましょう。

画像10

これで一通りの設定は終わりです。

やらかし的な豆知識

もし、InteractItemTriggerの設定時に、Itemに対してシグナルを飛ばしてしまった場合、

誰かがエレベータのボタンを押した時にワールドにいる全員がWorldGateのある空間へワープするということが起きます。

気をつけてくださいねw(やらかしたので)

今日は以上ですかね。
一旦ネタ切れでございます。
またネタが出来たらお会いしましょう。

この記事が気に入ったらサポートをしてみませんか?