「残機」が減るようにしてみよう

ゲームによくある「残機」のシステムを実装してみましょう!
失敗すると残機が減り、0になるとゲームオーバーになります。
残機の状態はセーブして次回プレイに引き継がれるようにします。

ダメージを受けると残機が減る仕組みをつくる

Player Logic」コンポーネントを使って、ダメージを受けると残機が減る仕組みを実装します。

  • Hierarchyを右クリック、または上部メニューの「GameObject」から「Create Empty」を選択して空のGame Objectを作成してください。名前を「PlayerLife」としておきます。
  • PlayerLifeをクリックで選択してInspectorを確認しましょう。「Add Component」から「Player Timer」コンポーネントを追加してください。
    • Player TimerのTargetを「Player」、Keyを「Damage」、Delay Time Secondsを「1」として、+ボタンで項目をひとつ追加します。
      • 追加した項目のKeyを「DamageLogic」、Valueを「Signal」にしてください。
  • さらに「Player Logic」コンポーネントを追加します。
    • Player LogicのTargetを「Player」、Keyを「DamageLogic」として、+ボタンで項目をふたつ追加します。
      • 追加した項目を、それぞれ次のように設定してください。
        • 「life」「Integer」「Integer」「=Subtract」
          • 「RoomState」「Integer」「Player」「life」
          • 「Constant」「Integer」「1」
      • 「GameOver」「Signal」「=LessThanOrEqual」
        • 「RoomState」「Integer」「Player」「life」
        • 「Constant」「Integer」「0」

これで、プレイヤーが「Damage」というSignalを受け取った1秒後に「life」の値が1減り、0以下になると「GameOver」というSignalでゲームオーバー時のギミックを発動させられます。

残機数の初期化とセーブ機能をつくる

残機数の初期化とセーブも設定しましょう。

  • 同じくPlayerLifeオブジェクトのHierarchyで、Add Componentから「Initialize Player Trigger」コンポーネントを追加します。
    • +ボタンで項目を追加し、Keyを「life」、Initial Valueで「Integer」を選択して値を「3」にします。

これで「life」の初期値が「3」になり、ワールドを退出してもセーブされるようになりました。

このままでは「life」の値を確認できないので、画面上に値を表示するようにしてみましょう。

  • Hierarchyを右クリックか上部メニューのGameObjectから、「UI>PlayerLocalUI – cluster」を追加します。
    • ※UIはシーン上に非常に大きく表示されるため、見づらい場合はHierarchyで選択してからシーン上で「F」キーを押してフォーカスしてください。
  • PlayerLocalUI>SafeAreaを右クリックして、子オブジェクトとして「UI>Legacy>Text」を追加します。
  • 追加された「Text (Legacy)」を選択し、InspectorのAdd Componentから「Set Text Gimmick」を追加してください。
    • Set Text GimmickのTargetを「LocalPlayer」、Keyを「life」、Parameter Typeを「Integer」としましょう。またFormatは「{0}」としておきます。

再生ボタンを押してプレビュー、またはアップロードして確認してみましょう。先ほど設定した初期値の「3」が表示されます。

実際にゲームで使ってみましょう!
テンプレートワールドの「Playground(アスレチック)」に組み込んで、アスレチックの足場から落ちたときに残機が減るようにします。

「足場から落ちたとき」は「足場の下の空間にアバターが入ったとき」として判定することができます。

  • 新しいGameObjectを作成して名前を「DamageArea」とし、足場より低い位置に移動してください。
    • ※Despawn Heightよりは低くならないようにしてください。また落ちたときに中間地点に戻すワープなどを設定している場合は、それらよりも上に来るようにします。
  • DamageAreaのInspectorで「Box Collider」を追加し、「Is Trigger」にチェックを入れます。
    • このコライダーに触れたときにメッセージを表示するようにしていくので、落下したときにメッセージを表示したい範囲に広げましょう。Box Colliderの「Size」の値を調整するか、Edit Colliderボタンを押して緑の枠線の範囲を動かしてください。
  • さらに「On Collide Item Trigger」コンポーネントを追加します。
    • +ボタンで項目をひとつ追加し、Targetを「CollidedItemOrPlayer」、その隣のKeyを「Damage」、Valueを「Signal」にします。

ここまでできたら試してみましょう。足場から落下してDamageAreaで設定した範囲に入るたびに残機の表示が減っていきます。

続いてゲームオーバーになったときの挙動をつくっていきます。
残機がゼロになると「GameOver」のSignalが飛ぶようにしたので、このSignalをギミックで受け取ることでゲームオーバーの演出などをつくることができます。
今回はゲームオーバーになると牢屋にワープするようにしてみます。

まずはワープ先の牢屋をつくります。

  • 空のGameObjectを作成して名前を「Jail」に変更してください。アスレチックから離れた場所にJailを移動し、その子として床や壁を置いて牢屋をつくりましょう。
    • 床や壁にはAssets/ClusterCreatorKitTemplate/Playground/Prefabs/StaticObjectsに入っている足場タイルなども利用してみてください。
  • Hierarchy上でJailの子に空のGameObjectを作成し、名前をWarpTargetにします。
    • WarpTargetはアバターをワープさせたい位置に移動してください。

次にワープする仕組みをつくります。

  • 牢屋ができたら、最初に作成した「PlayerLife」オブジェクトを選択してInspectorを確認します。
    Add Componentボタンをクリックして、PlayerLifeに「Warp Player Gimmick」コンポーネントを追加してください。
    • Warp Player GimmickのTargetを「Player」、Keyを「GameOver」と設定し、Target Transformの項目に先ほど作成した「WarpTarget」オブジェクトをドラッグ&ドロップで指定します。

これで、残機がゼロになると牢屋にワープするようになりました。実行して確認してみましょう。

最後に、牢屋の中でボタンをクリックするとリトライできる仕組みをつくります。

まずはリトライできるよう、最初の地点に戻る仕組みをつくります。

  • PlayerLifeのInspectorで「Respawn Player Gimmick」コンポーネントを追加してください。
  • これで「Respawn」というSignalでプレイヤーが最初の入室位置からリスポーンするようになります。
    • ※入室位置以外からリトライさせたい場合は、代わりに上と同様にWarp Player Gimmickを利用します。

次に牢屋からこの仕組みを動かせるようにボタンを設置します。

  • リトライボタンをつくっていきます。Jailの子に「RetryButton」という空のGameObjectを作成し、「Interact Item Trigger」コンポーネントを追加してください。
    • Interact Item Triggerの+ボタンで項目をふたつ追加し、それぞれ
      • Target=「Owner」、Key=「life」、Value=「Integer」「3」
      • Target=「Owner」、Key=「Respawn」、Value=「Signal」
    • と設定します。
  • またRetryButtonの子に3D Object>Cubeを追加して、ボタンをクリックできるようにしてください。

以上で完成です。アップロードして確認してみましょう。
牢屋のボタンを押すと残機が3に戻り、入室位置からリトライできるようになります。

セーブ機能とロジックなどを組み合わせることで、さまざまなデータを引き継いで利用することができます。
継続的に遊べる仕組みをつくってワールドの体験を豊かにしてみましょう!

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

Cluster Creators Guide|バーチャル空間での創作を学ぶならをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む