「ワープ/エントリーギミック」と「自動的に止まるストップウォッチ」をつくる──リリーもひとりでつくれるもん!〜ミニゲーム編〜 vol.3

毎月25日開催のアバターの日などでMCをつとめるリリーさんがUnityでのワールド制作に挑む「リリーもひとりでつくれるもん!」。ミニゲーム編では、リリーさんが考えたゲームを回を追ってちょっとずつつくっていきます。

本記事では、リリーさんが制作したゲームを同じようにつくることができるように、配信で辿った手順を記事として紹介していきます。
最終的に、タイムアタック付きの落ちてくる消えていく床から逃げるミニゲームワールドが完成します(完成ワールドは下記で公開されているので、ぜひ遊びに行ってみてください)。

今回は「ワープギミック」と「自動的に止まるストップウォッチ」をつくっていきます(前回の続きとなるので、まだ読んでない方はぜひ前の記事をご覧ください!)。

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

最初に前回までで制作した消える床のゲームエリアにワープするようにします。このワープがエントリーを兼ね、後ほど制作するストップウォッチの自動ストップ機能に必要な機能となります。
では、つくっていきましょう!

  • Hierarchyを右クリック、または上部メニューのGameObjectからCreate Emptyで空のGameObjectを作成します。
    • 名前は「WarpEntry」にします。
    • 「WarpEntry」の子に見た目となるオブジェクトを追加します。
      • Hierarchyを右クリック、または上部メニューのGameObjectからCubeを追加します。スケールを良い感じに調整しましょう。

まずはCubeを選択できるようにします。

  • 「WarpEntry」を選択してInspectorで、Add Componentから「Interact Item Trigger」コンポーネントを設定。
    • Targetは「Owner」、Keyは「WarpSignal」、Valueは「Signal」に設定してください。

次にワープができるようにします。

  • 「WarpEntry」を選択してInspectorで、Add Componentから「Warp Player Gimmick」コンポーネントを設定。
    • Targetは「Player」、Keyは先ほど設定したものと同じ「WarpSignal」に設定してください。
    • ワープ先を指定するための空のGameObjectを作成して、良い感じの場所に配置してください。
    • 配置したら、そのGameObjectをTarget Transformにドラッグ&ドロップしてください。

これで、ワープギミックの完成です!

次はタイムアタックができるようにストップウォッチをつくっていきます。ストップウォッチはスタートボタンを押すと自動的に作動するようにします。
それでは、制作していきます!

ストップウォッチの機能をつくる

  • Hierarchyを右クリック、または上部メニューの「GameObject」からCreate Emptyを選択して新規GameObjectを作成します。
    • 作成したGameObjectを選択してInspectorを開き、Add Componentから必要なコンポーネントを追加していきます。
  • まずはGlobal Timerを追加します。Keyを「Count」、Delay Time Secondsを「1」に設定し、+ボタンでトリガーを追加します。
    • 追加したトリガーのKeyを「CountCheck」、Valueを「Signal」とします。
    • このTimerを使って、1秒ごとに時間をカウントします。
  • 続いてGlobal Logicを追加して、ストップウォッチがカウント中かどうかを判定する部分をつくります。
    • Global LogicのKeyをTimerのトリガーと同じ「CountCheck」にします。
    • +ボタンで計算式を追加して、Keyを「CountUp」、Typeを「Signal」とします。
    • 演算子は「=」、引数は「RoomState」「Bool」でKeyを「isCounting」とします。
    • これでカウント中のフラグ(isCounting)が立っているときだけ次のステップに進むようになります。
  • 最後にもうひとつGlobal Logicを追加し、KeyをCountUpとしてください。+ボタンで計算式をふたつ追加します。
    • ひとつめはKeyを「time」「Integer」、演算子を「=Add」、引数のひとつめは「RoomState」「Integer」「time」、ふたつめを「Constant」「Integer」「1」とします。
    • ふたつめの式はKeyを「Count」「Signal」、演算子「=」、引数「Constant」「Bool」でチェックをつけます
    • このLogicで秒数をカウントし、さらにTimerを呼び出して次の1秒の計測をスタートします。

計測した時間を表示する

TimerとLogicで計測した秒数は「time」というKeyに発行されます。この値を表示できるようにしましょう。

  • 新規GameObjectの作成メニューから「UI>Canvas」を作成します。
    • 作成したCanvasのInspectorで、Render Modeを「World Space」に変更してから、Rect Transformの「Pos X/Y/Z」「Width」「Height」を調整してちょうどいい位置・大きさにします(下記画像の設定が目安です)。
    • また、Dynamic Pixels Per Unitという項目の値を大きくしておくと、テキストが綺麗に表示されるようになります。
      • ※Canvas作成時に「Event System」というオブジェクトが自動作成される場合がありますが、こちらは必ず削除してください。残っているとワールドアップロードができません。
  • HierarchyでCanvasを右クリックし、子オブジェクトとして「UI>Legacy>Text」を作成します。
    • TextのInspectorを開き、Rect TransformのScaleで大きさを調整してください。
    • またCharacter、Paragraphの各項目で、フォントの変更や中央揃えなどテキストの表示方法を細かく設定することができます。
  • Textに「Set Text Gimmick」コンポーネントを追加します。
    • Set Text GimmickのTargetを「Global」、Keyを「time」、Parameter Typeを「Integer」とし、Formatには「{0}秒」と入力します(半角・全角に注意してください)。

これで現在の計測時間が表示されるようになりました。

スタート・ストップ機能をつくる

  • 最後にスタート機能とストップ機能をつくります
  • ストップウォッチ機能を設定した「StopWatch」に「Global Logic」を新しく追加してください。
    • Targetは「Global」、Keyは前回までで作成したスタートボタンに設定したものと同じ「Start」を設定します。
    • 「+」を押して、設定していきます。
      • Keyは「Count」「Signal」、演算子は「=」、引数は「Constant」「Bool」にしてチェックを入れてください。
    • もう一度「+」を押して、設定していきます。
      • Keyは「isCounting」「Bool」、演算子は「=」、引数は「Constant」「Bool」にしてチェックを入れてください。
  • もうひとつ「Global Logic」を新しく追加してください。
    • Targetは「Global」、Keyは「Stop」を設定します。
    • 「+」を押して、設定していきます。
      • Keyは「isCounting」「Bool」、演算子は「=」、引数のひとつめは「Constant」「Bool」のチェックは外してください。

これでスタートボタンと連動して動くストップウォッチの完成です!

このままだとストップウォッチは動き続けます。ゲームエリアから全員脱落した時間が分からないとゲームとしては盛り上がらないので、ゲームエリアに残っている人が0人になったら、自動的にストップウォッチが止まる機能をつくっていきます。

シンプルな構成にしているため、不具合を起こしやすくなっております。ご承知おきください。

まずは最初に説明したようにワープギミックにエントリー機能を追加します。

  • 「WarpEntry」を選択してInspectorで「Interact Item Trigger」コンポーネントを設定。
    • 「+」を押してトリガーを追加してください。
      • Targetは「Global」、Keyは「PlayerCountUp」、Valueは「Signal」に設定してください。
  • ワープ機能を使ってエントリーしたプレイヤーを数え、それが0になった時にストップウォッチが止まるようにしていきます。

次にエントリーしたプレイヤーが落ちた時にエントリー数を減らす機能をつくっていきます。
いくつか方法はありますが、今回は落ちた人エリアに落ちた人を検出する仕組みをつくって、そこで検出されたらエントリー数を1減らすという仕組みをつくります。

  • GameOverAreaとしてつくった地面の上に、Hierarchyを右クリック、または上部メニューのGameObjectからCreate Emptyで空のGameObjectを作成します。
    • 選択してInspectorで「Box Collider」コンポーネントを設定してください。
      • コライダーの大きさをエリア全体を覆うようにしてください。
        • の際に、床のコライダと重ならないようにすること、アバターがジャンプでコライダーから飛び出さないようにしてください。
  • 次はコライダーにプレイヤーが入ったことを検知する仕組みをつくります。
    • 選択してInspectorで「On Collide Item Trigger」コンポーネントを設定してください。
      • Targetは「Global」、Keyは「PlayerCountDown」、Valueは「Signal」を設定してください。

最後にカウントを数える仕組みをつくります!

  • Hierarchyを右クリック、または上部メニューのGameObjectからCreate Emptyで空のGameObjectを作成します。
    • 名前は「PlayerCount」としてください。
      • このオブジェクトはゲームの見た目に関係しないので、どこに置いてあっても問題ありません。
  • まずは「カウントを増やす仕組み」をつくります。
    • 「PlayerCount」を選択してInspectorで「Global Logic」コンポーネントを設定してください。
      • Targetは「Global」、Keyは「PlayerCountUp」としてください。
      • 「+」を押して、設定していきます。
        • Keyは「playerCount」「Integer」、演算子は「=Add」、ひとつめの引数は「RoomState」「Integer」「playerCount」、ふたつめの引数は「Constant」「Integer」「1」を設定してください。

最後に「カウントを減らして、0になったらストップウォッチを止めるメッセージを出す仕組み」をつくります。

  • 「PlayerCount」を選択してInspectorで「Global Logic」コンポーネントを設定してください。
    • Targetは「Global」、Keyは「PlayerCountDown」としてください。
    • 「+」を押して、設定していきます。
      • Keyは「playerCount」「Integer」、演算子は「=Subtract」、ひとつめの引数は「RoomState」「Integer」「playerCount」、ふたつめの引数は「Constant」「Integer」「1」を設定してください。
    • もう一度「+」を押して、設定していきます。
      • Keyは「playerCount」「Integer」、演算子は「=Max」、ひとつめの引数は「RoomState」「Integer」「playerCount」、ふたつめの引数は「Constant」「Integer」「0」を設定してください。
    • 最後にもう一度「+」を押して、設定していきます。
      • Keyは「Stop」「Signal」、演算子は「=Equals」、ひとつめの引数は「RoomState」「Integer」「playerCount」、ふたつめの引数は「Constant」「Integer」「0」を設定してください。

これで、ゲームエリアに残っている人が0人になったら、自動的にストップウォッチが止まる機能の完成です!
どういう機能かは、リリーさんの配信やワールドをぜひ見てみてください。

だんだんゲームに必要そうな機能ができてきましたね!
次回はリセットの仕組みをつくります!

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