# 2方向テレポートシステムの作成

![イメージ画像](https://miro.medium.com/max/900/0*2b5QFZxYycWtbVvf.gif)

**注意点１**：このテレポートシステムはアップグレードされたため最新のテレポートシステムに関しては[**こちら**](https://docs.sandbox.game/game-maker-academy-jp/tutorials-1/advanced-tutorials/4-way-teleport-system-refined)**​**からご覧下さい。

**注意点２**：このシステムを使用するためにはアバターは一度倒された後にリスポーンする必要があります。現時点では倒されない状態このシステムを使用することができないため、ゲームをデザインする際にはその点を考慮してこのテレポートシステムを使用してください。

* 画面上部の**Global Parameters（グローバルパラメーター）**&#x306E;ボタンをクリックします。
* **Controller（コントローラー）**&#x306E;タブをクリックします。
* **Components（コンポーネント）**&#x306E;タブをクリックします。

  \
  \
  ここでアバターのHealth（体力）とDeath（死亡）の設定を行います。

  <br>

![](https://10474629-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MO_j99BJEXK4zHqxgqS%2F-MPiJzXIZ6IKH9TzlLx3%2F-MPiLxKeK-96pKo9J8zK%2FSpawner-page-1.png?alt=media\&token=a7063eec-2204-452c-80d0-f7bffe1d7277)

* Health のコンポーネントの設定では**Death Event（死亡理由）**&#x3067;**Respawn to Tag（リスポーンしてタグ）**&#x3092;選択します。
* **Respawn Tag（リスポーンタグ）**&#x306B;タグを追加します。ここでは**spawn1** と入力します。ゲーム内で**spawn1** のタグを持ったすべてのオブジェクトはアバターが倒された時にスポーンポイントとして使用されます。
* **Death Delay（リスポーンまでの時間）**&#x3068;はアバターがリスポーン前に地面にどのくらいの時間倒れているかを設定できる機能です。ここでは倒れた際のアニメーションを表示することなくアバターを即座にリスポーンさせるため&#x306B;**-2** を使用します。
* 実際にリスポーンする際にコントロールできるように、デフォルトの**Instant Death Message（死亡時メッセージ）**&#x3092;他のものに変更します。ここでは**Killx** を使用しました。

![](https://10474629-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MO_j99BJEXK4zHqxgqS%2F-MPiJzXIZ6IKH9TzlLx3%2F-MPiNFVRZciTWesDk3kr%2FSpawner-page-2.png?alt=media\&token=c0a5bd10-7e94-4b27-a9ba-ea564c9d38b2)

アバターが倒されると、**spawn1** のタグを持った一番近くにあるオブジェクトを探し、その場所でアバターをスポーンします。タグを見つけられない場合は立っている場所もしくは現在地でスポーンします。

* スポーンポイントとして使用するアセットを配置します。プレイヤー側で問題が起きないようにGame Maker にあるデフォルトのオブジェクトを使用するのをお勧めします。ここでは平たく、サイズも適切なStone Carving（彫刻石）を使用します。
* スポーンポイントを選択し、**spawn1** と名前を付けたタグを追加します。

![イメージ画像](https://miro.medium.com/max/2400/0*HA6A4m1D9cm_DTcc.png)

アバターが倒されたらStone Carving の上でスポーンする設定が完了しました。オブジェクトを見えない設定にしたり、地面より下に配置し見えないようにすることも可能です。

これでリスポーン場所の作成が完了です。<br>

2方向のテレポートシステムの仕組みを細かく解説します。

* まず初めに**スポーンポイントを複製**し、2方向テレポートシステムを構築したい場所までドラッグします。
* それぞれのスポーンポイントを選択し、**目のアイコン**をクリックして**オブジェクトを不可視の設定**にします。詳細は下記のスクリーンショットをご覧ください。
* スポーンポイントを選択しPhysics（物理的設定）の項目では**No collisions（コリジョンなし）**&#x3092;選択します。これによってアバターを含め他のオブジェクトの邪魔になることがなくなります。
* スポーンポイントを再度確認し、アバターのHealth のコンポーネントの設定がタグと合致しているかどうかを確認します。（ここでは**spawn1** となっているかどうかを確認します）

![イメージ画像](https://miro.medium.com/max/2400/0*S7Z65yVKDrltsU8m.png)

これで2つのスポーンポイントの設定が完了です。次にアバターが倒されるトリガーを設定してテレポートを使用できるようにします。

2方向テレポートシステムを正確に作動させるためには、必要のないスポナーを削除する**Void のビヘイビア**を持ったその他のオブジェクトと共に、**2つの異なるオブジェクトに2つのAsker のビヘイビアを設定する必要があります**。

1人目のAsker のビヘイビアはテレポートする先のスポナーをトリガーするメッセージを送信し、2人目のAsker のビヘイビアは新しいスポーンポイントにテレポートさせてくれるアバターを倒す設定をします。

* テレポートシステムを起動するレバーやボタンを設置します。ここではデフォルトのアセットである**Antient Lever（古代のレバー）**&#x3092;使用し、テレポートシステムのそれぞれの地点に追加しました。
* レバーに**Asker のビヘイビア**を追加します。
* プレイヤー向けにテキストを追加します。ただし回答も選択肢も1つのみとなります。ここでは**teleportAway** をメッセージとして使用します。

![ イメージ画像](https://miro.medium.com/max/2400/0*2PzmNP8E3Nbww5ru.png)

**2人目のAsker** は見えない設定のためどのアセットでも使用することができます。ここではデフォルトのサイズの小さいアセットである**NumPad Switch** を使用します。

* レバーの近くにオブジェクトを配置し、Asker のビヘイビアを設定します。
* **Message Required（必要なメッセージ）**&#x306B;は**teleportAway** と入力します。

これによってレバーに触るとQuestion 1 が発動し、それに回答するとQuestion 2にメッセージが送られ、そこから連鎖がスタートします。

* Question 2 の回答は既に**Killx** として設定してあるアバターのDeath Message（死亡時メッセージ）になるように設定します。

![イメージ画像](https://miro.medium.com/max/2400/0*KitexgCpWdHIuwb2.png)

* **NumPad Switch** を不可視の見えない設定（名前の左の目のアイコンに斜線がある状態）にしてPhysics（物理的設定）は**No Collisions（コリジョンなし）**&#x3092;設定します。

![イメージ画像](https://miro.medium.com/max/2400/0*GRirM1EhUpv4dt09.png)

倒されるとレバーの足元のスポーンポイントにテレポートしてしまいます。もう片方のスポーンポイントに移動したいのに両地点ともに同じタグが設定されいる場合にはVoid のビヘイビアを使用して、レバーを引いた時にテレポートしてしまう足元のスポーンポイントを削除します。

* 新しい**NumPad Switch** にVoid のビヘイビアを設定します。
* **NumPad Switch** を不可視の見えない状態に設定しNo Collisions（コリジョンなし）を選択します。
* **Void のビヘイビア**のMessage Required（必要なメッセージ）には回答を受け取ると送信される、**1人目のAsker のビヘイビア**からのメッセージである**teleportAway** を入力します。
* **Blocks Destruction（ブロックの破壊）** には**DontDestroy** を入力します。
* **Assets Destruction（アセットの破壊）**&#x306B;は**OnlyDestroyFromList** を入力します。
* **Assets List（アセットリスト）**&#x306B;はテレポートに使用したアセットを選択します。赤い線で囲まれた部分にあるアセットに反応するのでアセットが線の中にあることを確認します。

![イメージ画像](https://miro.medium.com/max/2400/0*7yEypVHcmP-CdBMZ.png)

これでテレポートを使って片方の地点に移動することが可能になります。

片方の地点に移動できたとしても最初のテレポート先を削除してしまったので戻ってくる場所を作成する設定を行います。

* 既に作成した2つの**NumPad Switch** を複製し、テレポート先までドラッグします。

![イメージ画像](https://miro.medium.com/max/2400/0*gQfyO-1Ekx7KKT-n.png)

* Void のビヘイビアを持った 移動先の**NumPad Switch** のポータルが赤線の破壊エリア内にあることを確認します。
* **Message Required（必要なメッセージ）**&#x3092;**teleportHome** に変更します。

![イメージ画像](https://miro.medium.com/max/2400/0*4Fx3Xln0zabqIKnl.png)

* もう片方の**NumPad Switch** を選択し、**Message Required（必要なメッセージ）**&#x3092;**teleportHome** に変更します。

![イメージ画像](https://miro.medium.com/max/2400/0*S9ukJQ1HrRTaEN-E.png)

* **Ancient Lever** を選択し、**A1 Broadcast** のメッセージを**teleportHome** に変更します。

![イメージ画像](https://miro.medium.com/max/2400/0*9QSwKr8ms0v1B-bn.png)

これで足元のスポナーの機能を削除する設定が完了しました。次にテレポートして元の場所に戻る設定を行います。

* **NumPad Switch をもう1つ作成**しAsset Spawner のビヘイビアを設定します。
* 作成した**NumPad Switch** を不可視の見えない状態に設定して**No Collision（コリジョンなし）**&#x3092;設定し、スポナーの真上に配置します。詳細はイメージ画像を参照してください。
* **Asset to Spawn（スポーンするアセット）**&#x306B;は**Stone Carving** を入力します。
* **Tags** に**spawn1** を入力することで新しいスポーンポイントを設定します。
* その他の設定が終わったら**Message required（必要なメッセージ）**&#x306B;**teleportHome** と入力します。 その後CTRL+「D」キーでアセットを複製し、反対側のもう一方のテレポーターの場所までドラッグして**Message** を**teleportAway** に変更します。
* **Physics Type（物理的設定）**&#x306F;**No Collisions（コリジョンなし）**&#x3092;選択します。

![イメージ画像](https://miro.medium.com/max/2400/0*lqjwZriatj0KkV_P.png)

これで2方向テレポートシステムの設定が完了です。
