押し床によるゲームコマンド

Tutorial

Beginner

+0XP

60 mins

(47)

Unity Technologies

押し床によるゲームコマンド

ゲームコマンドは、シーン内のゲームオブジェクトが他のゲームオブジェクトと通信するための方法で、シーンに複雑な動作を追加することができます。この通信はスクリプトのイベントを通して行われ、Unity のコンポーネントを介して制御することができます。このチュートリアルでは、関連するコンポーネントを提供します。

1. Interactablesを持つゲームオブジェクトを接続する

この例では、MovingPlatform を起動する押し床の作成方法を説明します。PressurePad (押し床) プレハブの作成方法と、MovingPlatform チュートリアルで作成したMovingPlatform プレハブとの通信方法を説明します。

PressurePadと通信ができるように MovingPlatform を準備するには、Simple TranslatorActivate チェックボックスを無効にします。

Project ビューに移動し、3DGamekitLite > Prefabs > Interactables に移動します。プロジェクトウィンドウから、MovingPlatform の近くのシーンビューに PressurePad をドラッグ&ドロップします。

PressurePad には、Send On Trigger Enter コンポーネントがあります。PressurePad の インスペクターウィンドウに移動して表示します。

Send On Trigger Enter では、PressurePad を他のゲームオブジェクトに接続し、プレイヤーがPressurePad に触れた時にインタラクションをトリガーすることができます。ここには多くの設定がありますが、今のところは最初の2つだけを考えてください。

  • Interaction Type は、接続されたゲームオブジェクトと PressurePad が相互作用したときに何が起こるかを定義します。
  • Interactive Object は、PressurePad が接続されているゲームオブジェクトです。

この例では、PressurePad MovingPlatform にリンクさせてみましょう。

  • Interaction TypeActivate に設定
  • Interactive Object の選択ボタン(フィールドの右にある円)をクリックし、MovingPlatform を選択します。

これらの設定は、PressurePadMovingPlatform に接続されており、2つのゲームオブジェクトが相互作用すると、PressurePadMovingPlatform を起動することを意味します。

シーンビューには、PressurePad MovingPlatform を結ぶ方向の矢印の線が表示されているはずです。これは、2つのゲームオブジェクト間の関係を視覚化し、ゲームコマンド送信側から受信側への流れを示しています。ここでは、PressurePad ゲームコマンドの送信者であり、MovingPlatform ゲームコマンドの受信者です。

ゲームをプレイして、PressurePad の上を歩くと、MovingPlatform が起動し、ループが始まります。一度踏んでしまえば、PressurePad は押したままの状態になります。

2. スイッチでドアを開ける

ゲームオブジェクトを接続してゲームコマンドを送信する方法がわかったので、この機能を使う他の方法を見てみましょう。

この例では、ドアを追加し、それを起動するための Switch を追加してみましょう。

  • プロジェクトウィンドウで、Assets > 3DGamekitLite > Prefabs > Interactables を選択します。
  • DoorSmall プレハブを見つけ、シーンにドラッグします。
  • DoorSmall をレベルのどこかに配置します。

ゲームオブジェクトを動かすためのヒント。

  • DoorSmall のインスペクターウィンドウには Position を使って移動させるために3つのTransform ツールがあります。
  • DoorSmall には複数の子ゲームオブジェクトがあります。必ず移動したい親ゲームオブジェクトを選択してください。

DoorSmall には Simple Translator というコンポーネントがあります。これは、Activation メッセージを受信したときに、地面にスライドしてドアが開くように自動的に設定されています。

ここでは、DoorSmall にアクティベーション・メッセージを送信する Switch を作成する方法を見てみましょう。

  • プロジェクトウィンドウで、Assets > 3DGamekitLite > Prefabs > Interactables を選択します。
  • Switch プレハブを見つけ、シーンにドラッグします。
  • テスト中に簡単にアクセスできるように、シーン内の DoorSmall の近くに配置します。
  • Play を押して Switch に駆け寄る。
  • エレンがぶつかるとスイッチが起動するように設定されています。Switch が起動すると、アニメーションを再生したり、色を変えたり、音を鳴らしたりします。

Switch が起動すると DoorSmall にコマンドを送信してスイッチを開くように設定しましょう。

  • ヒエラルキーウィンドウで、Switch を選択します。
  • インスペクターウィンドウを見てみましょう。

Switch には Send On Trigger Enter コンポーネントがあります。これは、Game Command Receiver コンポーネントがアタッチされているゲームオブジェクトにコマンドを送信することができます。

DoorSmall には、Game Command Receiver コンポーネントがアタッチされています。

DoorSmall にコマンドを送信します。

  • Switch を選択してから、ヒエラルキーウィンドウから DoorSmall をクリックしてドラッグし、Send On Trigger Enter コンポーネントにドラッグして、InteractiveObject スロットに配置します。

これで Switch はどのゲームオブジェクトにGame Commandを送ればいいのかが分かるようになりました。

この接続はシーンビューでも確認できます。白矢印の線は、どのゲームオブジェクトに接続されているか、Send On Trigger Enter がどの方向にメッセージを送信しているかを示しています。

  • SwitchSend On Trigger Enter コンポーネントで、Interaction Typeドロップダウンをクリックします。
  • Open に設定します。

これは、エレンDoorSmall にぶつかったときに Open コマンドを送信します。

  • Switch Send On Trigger Enter コンポーネントで、One Shot チェックボックスにチェックを入れます。

これにより、コンポーネントがゲームコマンドを一度だけ送信することが保証されます。

  • Play ボタンを押してレベルをテストします。

今回は、Switch に接触するとドアが開くはずです。

ドアが開かない場合は、接続が確実に DoorSmall に向かっていることを確認してください。

  • Simple Translator で、Interaction TypeOpen に設定されていることを確認します。
  • Game Command Receiver において、Switch Senders にあることを確認してください。

3. Counter と Switche を使用

複数のゲームオブジェクトを連結することができます。ここでは、3つの Switch を発動させた後にしか開かないドアを作る方法を説明します。

  • ヒエラルキーウィンドウで、Switch ゲームオブジェクトを選択します。
  • Ctrl + D (macOS の場合は Cmd + D) を押して、Switch を複製します。
  • これをもう1回繰り返して、もう1つの Switch を作成します。

Switch Switch(1) Switch(2) が表示されているはずです。これらは、ヒエラルキーウィンドウの一番下に表示されます。プロジェクトを整理しておくには、ヒエラルキーウィンドウでこれらを隣り合わせにドラッグします。

ゲームオブジェクトを複製すると、元のゲームオブジェクトと同じ位置に表示されます。移動しないと見えません。

  • ヒエラルキーウィンドウで、それぞれの Switch を個別に選択し、シーン内で隣り合うように配置します。

Switch ゲームオブジェクトを複製すると、Unity は DoorSmall との接続も複製します。とりあえず、この Switch のどれかにぶつかるとドアが開くようになっています。よかったら Play を押して試してみてください。

エレンが3つの Switch を全部起動した時だけドアが開くようにするには以下の通りに設定します。

  • プロジェクトウィンドウで、Assets > 3DGamekitLite > Prefabs > Interactables を選択します。
  • Counter プレハブを見つけて、シーンにドラッグします。
  • Switch の近くに配置してください。

Counter ゲームオブジェクトはシーンに物理的な存在感はなく、ゲームメカニクスが含まれているだけです。

ヒント:

シーンでは見えないので、選択するときはヒエラルキーウィンドウを使う必要があります。あるいは、ラベルを追加して、このゲームオブジェクトをシーンビューで見やすくすることもできます。

  • Counter を選択します。
  • インスペクターウィンドウの上部にある青い立方体をクリックします。
  • ドロップダウンからカラーラベルを選択します。

ゲームオブジェクトにラベルを追加します。

表示されない場合は、シーンビューでアイコンが小さすぎる可能性があります。以下の手順で変更してください。

  • シーンビューの上部にある Gizmos ドロップダウンをクリックします。
  • 3D Icons スライダーを調整して、シーンビューのアイコンのサイズを変更します。

これで、シーン内に送信者の数をカウントできる Counter ができたので、各 Switch から Counter に「OpenGame Command を送信する必要があります。

  • ヒエラルキーウィンドウで、Switch を選択します。
  • Counter をクリックして、そのまま手を離さずに Switch の Send on Trigger Enter コンポーネントにドラッグし、Interactive Object スロットに配置します。

つまり、コマンドを送信するゲームオブジェクトとして DoorSmall から Counter に置き換えます。

シーンビューの矢印が DoorSmall ではなく Counter に接続されるようになりました。

  • Switch (1) Switch (2) で上記の手順を繰り返します。

3つの Switch はすべて Counter を指しているはずです。これは、その Counter にメッセージとコマンドを送信するように設定されていることを意味します。

これを再確認するには、 Counter のインスペクタを見て、Game Command Receiver コンポーネントの Switch がすべて Senders リストにあることを確認してください。

これで Play モードに入って各 Switch にぶつかっても何も起こりません。エレンが3つの Switch すべてに触れたことを Counter が検知したときに、 DoorSmall に開くように指示する必要があります。

  • ヒエラルキーウィンドウで、Counter を選択します。
  • インスペクターウィンドウで、Gameplay Counter コンポーネントの以下の設定を変更します。
    • Interaction Type: Open
    • Is One Shot: True (チェックボックスをチェックする)
    • Target Count: 3

これは Open 型のコマンドを受信し、1 回だけカウントし、目標値を 3 に設定しています。

ここで、Counter から DoorSmall にコマンドを送信させてみましょう。

  • Counter が選択されている状態で、Send Game Command コンポーネントに以下の設定を入力します。
    • Interaction Type: Open
    • ヒエラルキーウィンドウから DoorSmall Interactive Object スロットにドラッグします。
    • One Shot: True (チェックボックスをチェックする)

これで各 SwitchCounter にコマンドを送信し、 Counter は3つのコマンドを受信すると DoorSmall に Open Command を送信します。

Play を押してレベルをテストします。各 Switch をアクティブにすることができ、3つすべてに触れると DoorSmall が開きます。

複数のアクションを必要とする多くの条件に Counter を使用することができます。Send Game Command コンポーネントには、様々なInteraction Typeオプションがあります。

Complete this Tutorial