毎月25日開催のアバターの日などでMCをつとめるリリーさんがUnityでのワールド制作に挑む「リリーもひとりでつくれるもん!」。ミニゲーム編では、リリーさんが考えたゲームを回を追ってちょっとずつつくっていきます。
そこで、本記事では、リリーさんが制作したゲームを同じようにつくることができるように、配信で辿った手順を記事として紹介していきます。
今回は「オブジェクトが当たると消える機能」と「ランダムにオブジェクトを落とす機能」をつくっていきます(前回の続きとなるので、まだ読んでない方はぜひ下記の記事をご覧ください!)。
リリーさんの配信を観ながら、ぜひ一緒に挑戦してみてください!
オブジェクトが当たると消える機能をつくる
まずは「特定のオブジェクトに当たった時に消える機能」をつくって、落ちてくるアイテムが床を消していくギミックをつくっていきます。

Prefab化した「Attack」を床の上空に置いて、再生してみると、ぶつかった時に床が消えるようになります!

RigidbodyのIs TriggerをTrue(チェックが入った状態)にするとオブジェクトが床をすり抜けるようになります。
また、RigidbodyのDragの数字を大きくするとオブジェクトが落ちるスピードが遅くなるので、好きな速さに設定してみてください。
ランダムに落ちるようにする
先ほどの章で「特定のオブジェクトに当たった時に消える機能」は完成したので、今度はこれをランダムな位置・タイミングで発生するようにして、ゲーム性を高めていきます。

一定間隔でオブジェクトを落とすギミックをつくる
まずはベースとなるギミックをつくります。このギミックを改変して徐々にランダム機能を付加していきます。

- Hierarchyを右クリック、または上部メニューのGameObjectからCreate Emptyで空のGameObjectを作成します
- 位置はPlayAreaの上にしておきましょう(真っ直ぐ下に落ちるため)
- 名前は「AttackGimmick」にしてください
- まずは、一定時間の間隔で生成するギミックのベースをつくります
- 「AttackGimmick」を選択してInspectorで、Add Componentから「Item Timer」コンポーネントを設定
- Targetは「This」、Keyは「Attack」に設定してください
- Delay Time Secondsにはオブジェクトを発生させたい時間を設定します
- 今回は「2」を設定しておきます
- Triggersの下にある「+」を選択してください
- Keyは「AttackCheck」、Valueは「Signal」としてください
- 「AttackGimmick」を選択してInspectorで、Add Componentから「Item Logic」コンポーネントを設定
- Targetを「This」、Keyは上で設定したものと同じ「AttackCheck」としてください
- 「+」を選択してください
- 左上のTargetは「This」、その右横のKeyは「Attack」、右上は「Signal」としてください
- 真ん中は「=」のままとしてください
- 下は左から「RoomState」「Bool」「This」、Keyは「isPlaying」としてください
- 「AttackGimmick」を選択してInspectorで、Add Componentから「Item Timer」コンポーネントを設定
- オブジェクトを新しく生成する仕組みをつくっていきます
- 「AttackGimmick」を選択してInspectorで、Add Componentから「Create Item Gimmick」コンポーネントを設定
- Targetは「This」、KeyはItem Timerで設定した「Attack」を設定してください
- Item Templateは先ほど制作したAttackのPrefabをプロジェクト欄からドラッグ&ドロップしてください
- オブジェクトが生成される場所を設定するSpawnPointは「Create Attack」としてください
- 「AttackGimmick」を選択してInspectorで、Add Componentから「Create Item Gimmick」コンポーネントを設定

- Vol.01でつくったスタートボタンが押された時にオブジェクトが生成されるようにしたいので、そのための仕組みをつくっていきます
- 「AttackGimmick」を選択してInspectorで、Add Componentから「Item Logic」コンポーネントを設定
- Targetは「Global」、Keyはスタートボタンに設定した「Start」を設定してください
- 「+」を選択してください
- 左上のTargetは「This」、その右のKeyはItem Timerで設定した「Attack」、さらに右のValueは「Signal」を設定してください
- 真ん中の段は「=」のままにしてください
- 下の段は左から「Constant」「Bool」チェックを入れてください
- もう一回「+」を選択してください
- 左上のTargetは「This」、その右のKeyはItem Logicで設定した「isPlaying」、さらに右のValueは「Bool」を設定してください
- 真ん中の段は「=」のままにしてください
- 下の段は左から「Constant」「Bool」チェックを入れてください
- 「AttackGimmick」を選択してInspectorで、Add Componentから「Item Logic」コンポーネントを設定

これで「一定間隔でオブジェクトを落とすギミック」が完成しました!スタートボタンを押して確かめてみましょう!

オブジェクトが落ちる時間の間隔をランダムにする
今つくった「一定間隔でオブジェクトを落とすギミック」を「ランダムな間隔」で落ちるようにしていきます。

- 先ほど「AttackGimmick」に設定したItem Timerの設定を変えることでランダムな間隔にするようにしていきます
- 「AttackGimmick」を選択してInspectorで、先ほど設定した「Item Timer」のKeyを「AttackInterval1」に変更してください
- 同じような設定のItem Timerをいくつか作成してください
- InspectorでItem Timerにカーソルがあたった状態で右クリックして「Copy Commponent」して、もう一度右クリックすると「Paste Commponent As New」が選択できるようになっているので、そちらで複製することができます
- 複製したItem TimerのKeyを「AttackInterval2」「AttackInterval3」などそれぞれ異なるものにした上で、Delay Time Secondsをそれぞれ異なる値にしてください
これで準備完了です!

- 複数のItem Timerをランダムに起動するようにします。
- 「AttackGimmick」を選択してInspectorで、Add Componentから「Item Trigger Lottery」を追加してください
- Targetは「This」、Keyは先ほどItem Timerに設定していたものと同じ「Attack」を設定してください
- Choicesの下の「+」を選択して、先ほど複製したItem Timerと同じ数の設定項目をつくってください
- Keyは先ほど設定した「AttackInterval1」「AttackInterval2」「AttackInterval3」などをそれぞれ設定してください
- Weightを設定することで、数字が大きいWeightが設定されたKeyが起動する確率を大きくすることができます

これで「ランダムな間隔」で落ちるようになりました!

オブジェクトが落ちる場所をランダムにする
最後にランダムな位置でオブジェクトが発生するようにします。
方法はいくつかありますが、今回はシンプルな方法を採用します。オブジェクトの発生源となる「AttackGimmick」をAnimationを使って常にランダムに動くようにします。

こちらは下記の記事を参考にしてAnimationを制作してみてください!
設定する場合に「1.5」「0.3」など中途半端な時間にするのがポイントです。
制作中はダミーのオブジェクトを設定しておくと、動きの調整がしやすいです。

これでランダムにオブジェクトを落とすギミックが完成しました!
床を消すギミックと合わさって、ゲームらしくなってきました。
これで「特定のオブジェクトに当たった時に消える機能」は完成です!これを色々なところで使えるようにPrefab化しておきましょう。