ワールドを一通り遊べるようにする

:::note info
本記事は、[HeliScriptでリッチなアスレチックワールドを作ろう！【コピペで使えるサンプルコード付き】](https://qiita.com/IwahanaFuku/private/63e6bbca2bc1f13ed57e)の記事の一部です

VR法人HIKKYのorganization下のQiita/Zenn両方に投稿しております。
:::

## はじめに
今まで作ってきた[アイテムをまっすぐ動かすcomponent](https://qiita.com/IwahanaFuku/private/f171b7af2a9e15dc2139)、
[アイテムを反復して動かすcomponent](https://qiita.com/IwahanaFuku/private/dfc38371ad0ed7cc034d)、
[中間ポイント、ゲームオーバー、ゲームクリア用のcomponent](https://qiita.com/IwahanaFuku/private/a5479a1a13f6267e558d)を使用して、アスレチックワールドを一通り遊べるようにしましょう！

![2024-03-26 18-25-06.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629942/ee6c0bd3-042c-f7a8-be71-0b61da300834.gif)

## 配置作業の前に
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629942/5d63bd26-d7da-af7b-0f5c-effc403a7e7d.png)

Propatyなどが設定されたゲームオブジェクトは[Prefab](https://docs.unity3d.com/ja/2023.2/Manual/CreatingPrefabs.html)にしておいて、それぞれの差分として[Prefab Variant](https://docs.unity3d.com/ja/2018.4/Manual/PrefabVariants.html)を作っておくと、今後Propertyを増やしたい時に、Prefabに対して変更を適用させれば、自動的に、Prefab Variantにも適用されるようになり、仕様を変更したいときも柔軟に対応することが出来るようになります。

## アスレチックギミックの設定
### どんどんと上ってきて、プレイヤーが当たるとゲームオーバーになるマグマ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629942/bca41b58-164c-e5e3-3ccd-e0cef658a690.png)

マグマにはItemMove componentを付けて、Propatyとして、y軸方向に + 0.3ずつ上っていくようにしています。

また、仮モデルとして、HEO Objectに赤色のPlaneを設定しています。

GameClearManager componentや、GameOverManager componentは、**Magma**という名前のItemを取得することで動作するようになっているので、この名前は変えないようにしておきます。

:::note info
より再利用性を高めたり、コードを見なくても依存しているItemの名前がわかるように、Propertyとして、Magmaの名前を設定できるようにしてもよいかもしれません。
:::

### ある程度のところまで進んだらそこからスタートするための中間ポイント
※可視化のため、半透明のマテリアルを適用させています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629942/49d699cf-f251-c651-aa6d-6d11e0a76743.png)

中間ポイントの構造は[中間ポイント](https://qiita.com/IwahanaFuku/private/a5479a1a13f6267e558d#%E4%B8%AD%E9%96%93%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88)で作った内容と同じですが、位置をそれぞれ調整しています。

これによって、ある程度進んだ後、中間ポイント設定用コライダーを経過することによって、中間ポイント変更されるようにできました。

コライダーの大きさを変えることで、中間ポイントが設定される広さも変更できるので、ワールドに合わせてプレイヤーが中間ポイント周辺を通過しているにもかかわらず、実際に中間地点が更新されていない…。という事は起きないようにしましょう。

### ゲームオーバーとリトライ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629942/dd7dd897-0535-0502-3b5c-04b1e57b7074.png)

ゲームオーバー画面用のボックスは、マグマの初期位置よりもかなり下に配置して、アスレチック内のアイテムの動作の影響を受けないようにしましょう。

また、remain（残機）は3に設定していますが、ゲームの難易度によって上下して設定します。

:::note info
アスレチックワールドは何度も自分でテストしていると、だんだんと自分自身のプレイがうまくなってきて、いざ他の人に遊んでもらうと全然クリアできない難易度になったりするので、最終的にはほかの人に遊んでもらって難易度の調整を行うとより、クオリティの高いワールドに仕上がります。
:::

### 上下に反復して動く床
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629942/66004537-d0fe-dbe4-15a5-c9c0a4f09dce.png)

上下に動く床をoffsetを0.5ずつ互い違いになるように配置しています。
これによって、タイミングよく床を飛び移っていくようなアスレチックを作ることが出来ます。

![2024-03-29 11-12-34_4.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629942/ba12e1c3-3297-30fa-9644-4680d997723b.gif)

### 横に押し出されるブロック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629942/68ff2374-d742-5e51-1b86-f7b3a4c1d091.png)

横に押し出されるブロックは、これだけでも

* プレイヤー自体が横に押し出されて急いで渡らないといけない橋のアスレチック
* 橋をなくすことでブロック自体にプレイヤーが乗り移ることのできるアスレチック

の二つのアスレチックを作ることが出来ます。

こちらは、プレイヤー自体が押し出されるブロックはは同じoffset（タイミング）にして、乗り移るブロックは、0.5ずつの互い違いになるように配置しています。

![2024-03-29 11-12-34_5.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629942/fdf61d46-f50a-5a96-75f2-48574e8c54d8.gif)

### マグマを止める
マグマを止める処理は、GameClearManager compornentの中の、`OnClickNode()`によって呼ばれているため、GameClearManager componentを付けた、HEO Field配下にあるNode（GameObject）であれば、マグマを止める処理が呼ばれるようになります。
今回は、仮としてSphereを配置しておいて、これをクリックしたら、マグマを止めることが出来るようにしておきます。

![2024-03-29 11-12-34_6.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629942/ba6a037e-1cef-afb8-e501-69807934cb44.gif)

## まとめ
今まで作ってきたcomponentを利用して、ワールドを一通り遊ぶことが出来るようになりました！
propertyを利用したcomponentを作ることで、自分だけの大ボリュームなVket Cloudのワールドが簡単に、短い時間で作れるようになります。
次回からはより多様なコンポーネントを作って、より豪華なアスレチックを作っていきます。

 **前 :** [HeliScriptで中間ポイント、ゲームオーバー、ゲームクリアを実装する【コピペで使えるサンプルコード付き】](https://qiita.com/IwahanaFuku/private/a5479a1a13f6267e558d) 
 **次 :** [HeliScriptでアイテムを回転させる【コピペで使えるサンプルコード付き】](https://qiita.com/IwahanaFuku/items/48611f49b875529cedf0)