「オブジェクトが当たると消える機能」と「ランダムにオブジェクトを落とす機能」をつくる──リリーもひとりでつくれるもん!〜ミニゲーム編〜 vol.2

毎月25日開催のアバターの日などでMCをつとめるリリーさんがUnityでのワールド制作に挑む「リリーもひとりでつくれるもん!」。ミニゲーム編では、リリーさんが考えたゲームを回を追ってちょっとずつつくっていきます。
そこで、本記事では、リリーさんが制作したゲームを同じようにつくることができるように、配信で辿った手順を記事として紹介していきます。

今回は「オブジェクトが当たると消える機能」と「ランダムにオブジェクトを落とす機能」をつくっていきます(前回の続きとなるので、まだ読んでない方はぜひ下記の記事をご覧ください!)。

リリーさんの配信を観ながら、ぜひ一緒に挑戦してみてください!

まずは「特定のオブジェクトに当たった時に消える機能」をつくって、落ちてくるアイテムが床を消していくギミックをつくっていきます。

  • Hierarchyを右クリック、または上部メニューのGameObjectからCreate Emptyで空のGameObjectを作成します。
    • 名前は「Attack」にしておきましょう。
    • 「Attack」の子に見た目となるオブジェクトを追加します。
      • Hierarchyを右クリック、または上部メニューのGameObjectからSphereを追加します。スケールを良い感じに調整しましょう。
      • また、余力があればSphereのSphere Colliderを削除し、別途GameObjectを作成して見た目と別のコライダを設定しておくと、後ほど見た目やコライダーの調整が楽になります!詳しくはこちらの記事をご覧ください。
  • 「Attack」を選択してInspectorで、Add Componentから「Movable Item」コンポーネントを設定。
    • 動くアイテムには「Movable Item」が必要となります。
    • Movable Item」を設定すると、自動的に「Rigidbody」が設定されます。Rigidbodyの「Use Gravity」がTrue(チェックが入った状態)、「 Is Kinematic」がFalse(チェックが入っていない状態)になるように設定してください。
  • 「Attack」を選択してInspectorで、Add Componentから「On Collide Item Trigger」コンポーネントを設定してください。

これで「特定のオブジェクトに当たった時に消える機能」は完成です!これを色々なところで使えるようにPrefab化しておきましょう。

  • 「Attack」を選択し、Projectへドラッグ&ドロップしてPrefab化します。
    • Prefab化できたらScene上のものは一旦削除しましょう。

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から「Create Item Gimmick」コンポーネントを設定
      • Targetは「This」、KeyはItem Timerで設定した「Attack」を設定してください
      • Item Templateは先ほど制作したAttackのPrefabをプロジェクト欄からドラッグ&ドロップしてください
      • オブジェクトが生成される場所を設定するSpawnPointは「Create Attack」としてください
  • 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」に設定した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」など中途半端な時間にするのがポイントです。
制作中はダミーのオブジェクトを設定しておくと、動きの調整がしやすいです。

これでランダムにオブジェクトを落とすギミックが完成しました!
床を消すギミックと合わさって、ゲームらしくなってきました。

記事をシェアしてワールド制作を盛り上げよう!