【cluster】実に簡単な弾幕系敵弾の実装方法について【Advent Calendar 2020】

# この記事について
- この記事は、[Cluster Creator Kit Advent Calendar 2020](https://adventar.org/calendars/5175) 7日目の記事です。

# この記事を書いている人
- うのっちです。【[clusterのうのっちはコチラから](https://cluster.mu/u/sanpeita)】

# この記事でできること
- clusterのワールド作成において、通常のunity開発の感覚で、なおかつCCKならではのノンコーディングによる「敵弾発射→着弾したらdestroy、適当なタイミングでまた発射」を実装することができます。
- (unityの開発者としては、playgroundやmicrogamesのように、ノンコーディングでビジュアライズに近い環境で開発できるプラットフォームの存在というのは実に重要なことだと思っています)
- [うのっちのclusterゲームワールド杯2020エントリー作品](https://cluster.mu/w/b793d404-407d-409d-a79e-47e63c0aa977)の機能を事例として紹介します。

# 事例
- 下記gif画像のように、こんな感じのことができるようになります。
![FW2弾生成ギヤシステムの弾紹介動画1203.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191635/19e5c22f-9ab1-f594-0806-6f96100a4505.gif)


# 概要図
![ギヤ回転弾生成システム.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191635/b18b22ac-1569-54a9-95a7-2c3bbca85fa0.png)

- 下記gif画像のようになります。


![ギヤシステムの動画.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191635/08702e98-24fe-a0f0-61c3-380ffd67e8f8.gif)


# つくりかた
## 「弾幕ギヤ」
- 下図のように、適当なギヤを作ります。ギヤの数と回転速度が、弾幕に反映されます。
- コライダーについては、isTriggerにチェックを入れましょう。
- ![スクリーンショット 2020-12-03 9.45.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191635/47c35b28-e566-eadd-89ab-68562b140d7d.png)
- animationについては、[公式の記事でも解説](https://creator.cluster.mu/2020/08/26/animation-animator/)があるので、そちらを参考にしてみてください。

## 「弾生成トリガーブレード」
- 下図のように、弾幕ギヤに接触するオブジェクトを作ります。自分の場合は、なんの弾幕かわかるよう、対象をテクスチャとして設定しています。
- ![スクリーンショット 2020-12-03 9.50.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191635/81739bf5-be4c-dbed-a7b2-99430067fb0c.png)

- コンポーネントの設定は、下記および下図を参考にしてみてください。([On Collide Item Trigger](https://clustervr.gitbook.io/creatorkit/triggers/on-collide-item-trigger))
- Rigidbodyでは、FreezeポジションとFreezeローテーションすべてにチェックを入れている(チェックいれないと吹っ飛ぶから)
- ![スクリーンショット 2020-12-03 9.54.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191635/f9636dc4-0c0c-5fb5-89bd-f7c6e36c96c1.png)
- key名は開発当初のアルファベットの連番だったので、その名残です。

## 「弾spawnCube」
- 弾のスポーンについては、下図のように、クリエイターキットドキュメント([Create Item Gimmick](https://clustervr.gitbook.io/creatorkit/gimmicks/create-item-gimmick))に沿って設定しています。
- ![スクリーンショット 2020-12-03 9.58.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191635/9e8d82a6-d540-9a0a-0343-e7d21b1d83a9.png)

- トリガーkeyをロジックkeyに設定して、
- 生成する敵弾のプレファブを設定して、
- そのプレファブをどこにスポーンさせるかのオブジェクトを設定して完成です。

## 「弾幕の仕上げ」
- 敵弾spawnを回転させなければ、タレットのように発射されます。
    - この場合、発射間隔、つまりギヤの回転速度とギヤ数に注意してください。あまりにもたくさん発射されるようだと、設定によっては、敵弾同士でdestroyしたり、そもそも敵弾オブジェクト同士の衝突で予期できない放線を描くと思います。
- 回転させれば、当ワールドのように、弾幕を展開することもできます。

# 総括
- clusterはバーチャルSNSでもあるので、他者(アバターとの交流)が大切でもあります。
- しかしながら、CCKを利用した、よりゲーミングなワールドがもっともっと増えてもいいと、そう思います。(今後のclusterアプデのセーブ機能も、よりゲーミングに活用できそうですね!)
- 特にシューティングゲームに関しては、アイデアなど頭打ち感があり、家庭用もアーケードも「革新的な」ものはなかなかありませんが、だからこそ、今まで出し尽くされている様々なパターンをここで表現するのも大いにアリなのではと思います。

# 自分の実装ワールドの紹介
- [FieldWalking2-Cluster Edition-](https://cluster.mu/w/b793d404-407d-409d-a79e-47e63c0aa977)![FW2titlePicture1109.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191635/cf33ceaa-abdc-d3c3-8f1c-bfc878396b9a.png)

- ワールド紹介より一部抜粋
    - 敵弾生成ギヤシステムのご見学は、入室後、左へまっすぐ進んでください。
    - 『敵の弾幕をかいくぐってレイドボス討伐なるか!?』
    - 『弾幕を発生させるギヤシステムとトリガーギミックブレードを君は見つけることができるか!?』
    - UnityroomでリリースしたFieldWalkingの新作をclusterバージョンとしてシステムを変えて制作しました。
    - 今回はアクマがレイドボスとして登場します。
    - 弾幕と残留弾に注意してくださいね。
    - 散策したり、エンドレスな戦いを楽しんでください。

# あしたの記事のご紹介
- あしたは、柏葉くるみさんの記事となります。ゲームジャムかな、W杯の話かな、ギミックかな、とにかく気になりますね!
- 上記、8(火)を迎えましたら、リンクを貼ります。

# 最後に、あらためて簡単な自己紹介
![デイヴィデフォルメイラストのコピー.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191635/77fbf258-d88c-211a-4fca-a2dcc405ee44.jpeg)

- もともとCOBOLやVBなど、いわゆる手続き型プログラミングが好きで活動していましたが、ビジュアルプログラミングに触れてからは、現在は主にunityと3Dプリンタやtoioなどを中心にインプットとアウトプットの活動をしています。
- ぜひ【[うのっちポータルサイト](https://sanpeita.github.io/)】もよろしくお願いします。
- [clusterユーザーと加速する非公式 Advent Calendar 2020](https://adventar.org/calendars/5248) の8日も記事を書くのでよろしくお願いします。
- [toio Advent Calendar 2020](https://qiita.com/advent-calendar/2020/toiotomo) の21日目にも記事を書くので、ロボット好きな方はこちらもどうぞ!