【Unity/PlayMaker】コントローラーのボタン入力による、インタラクションの実装

この記事ではコントローラーのトリガーボタンを入力することで、インタラクションを引き起こす方法を説明します。

ボタン入力によるインタラクションを実装することで、空間への没入感を高めることができます。

この記事を理解することで、以下のようなインタラクションを作れます。

事前準備

UnityのプラグインであるPlayMakerをあらかじめインストールしておきましょう。

はじめてPlayMakerを使用するひとは、あらかじめ以下の記事を一読することで、理解を深めることができます。

概要

STYLY上には、あらかじめ、「Global_TriggerPressDown_R(右コントローラーボタン)」と「Global_TriggerPressDown_L(左コントローラーボタン」のグローバルイベントが組み込まれています。

この2つのグローバルイベントと、アクションを組み合わせることによって、インタラクションを引き起こすことができます。

今回は例として、コントローラーのボタンを入力すると、弾丸が発射される仕組みを設計します。

大きな流れは以下になります。

  1. 弾丸を作る
  2. PlayMakerで弾丸のアクションを設定する
  3. 発射台を作る
  4. PlayMakerで発射台のアクションを設定する

弾丸を作る

最初に、弾丸を作ります。

Hierarchy上で、Hierarchy上で、右クリックをし「Create > 3D Object > Sphere」を選択します。すると、Sphereが作られ、弾丸となります。

Sphereをつくる

Sphereが作られたら、Inspecterの画面を開きます。弾丸の設定をします。

名前:bullet
Positionを ( X, Y, Z ) = ( 0, 0, 0)
Scaleを ( X, Y, Z ) = ( 0.5, 0.5, 0.5 )

名前 : Position : Scale を変更

このbulletにPlayMakerでアクションを加えます。

PlayMakerで弾丸のアクションを設定する

bulletを選択した状態で、PlayMaker Editorを開き、右クリックで「Add FSM」を選択しFSMを追加します。赤い「玩」というアイコンがbullet上に表示されたら、FSMが追加された状態です。

FSMを追加

FSMを追加したら、「State 1」の名前を「bullet action」に変更しましょう。

State 1の名前を変更

つぎに、アクションを追加します。アクションを追加するには、Stateタブを選択した状態で、右下の「Action Browser」を選択し、ブラウザーから使用するアクションを選択します。

Action Browserを表示

今回使用するアクションは「Translate」と「Destroy Object」です。
一番上の検索欄より、TranslateとDestroy Objectを検索し、State内に追加しましょう。

「Translate」と「Destroy Object」を追加

アクションが追加されたら、設定をします。

Translate3Dモデルを移動させるアクションです。
以下のように設定します。

Xには、=アイコンを選択して、5を入力します。
Spaceは、Selfを入力してください。

Spaceは、World(ワールド座標)とSelf(ローカル座標)の2種類あります。
ワールド座標は原点から見た座標、ローカル座標は親からみた相対的な座標です。
今回は、発射台を回転させたり位置を変更したときに、発射台の座標に相対的に弾丸の座標も変わってほしいので、Selfにしてあります。

Translateを設定

これでbulletに移動(発射)のアクションが追加されました。

次に、Destroy Obectを設定します。

Destroy Object:対象の3Dモデルが消滅するアクションです。
Destroy Objectを設定しないと、bulletを発射した際に、残り続けてしまうためです。

以下のように設定します

  • Game Object : Hierarchy内の「bullet」をドラッグして設定
  • Delay : 5に設定
    DelayはGame Objectが消えるまでの時間です。今回は5秒後にbulletが消滅するように設定しました。

Destroy Objectを設定

これで弾丸(bullet)の設定ができました。

最後に、bulletをプロジェクトビューにドラッグして、prefab化しましょう。
prefabにしましたら、Hierarchy内のbulletは削除します。

prefab化

次に、発射台をつくります。

発射台を作る

Hierarcy上で、右クリックをし「Create > 3D Object > Cube」を選択します。
Cubeが作られ、弾丸の発射台となります。

Cubeをつくる

Cubeの設定をしましょう。以下のように設定します

  • 名前:Point
  • Position / Rotation : ( X, Y, Z) = ( 0, 0, 0 )
  • Scale : ( X, Y, Z ) = ( 1, 1, 1 )

発射台(Point)の設定

Cubeのアクションを追加します。

PlayMakerで発射台のアクションを設定する

Cubeを選択した状態で、PlayMaker Editor上で右クリックをします。
メニューが開かれるので「Add State」を選択し、「State 1」が追加されました。

Add State

State 1の名前を、「Waiting for Trigger」とします。

名前を変更

次に、Stateを2つ追加します。
PlayMaker Editor上で右クリックし、「Add State」を選択します。
2回行い、Stateを2つ追加しましょう。

Stateを2つ追加する

Stateの名前を変更しましょう。以下のようにします。

  • State 1 → Trigger 1
  • State 2 → Trigger 2

Trigger 1と2に、コントローラーのボタンの入力によるインタラクションを実装します。

PlayMaker Editorの右画面の「Event」タブを開き、下の「Add Event」を選択し、「Global_TriggerPressDown_R」「Global_TriggerPressDown_L」を追加します。

Global_TriggerPressDown_R / Global_TriggerPressDown_Lを追加

この「Global_TriggerPressDown_R/L」がコントローラーのトリガーボタンの情報を取得するイベントになります。
右コントローラー(Global_TriggerPressDown_R)の設定からしましょう。

Trigger 1を右クリックし、「Add Transition > Global_TriggerPressDown_R」を選択します。

イベントの追加

Trigger 2にも同じように選択し、下のような状態にしましょう。

イベントの追加

次に、イベントの遷移を追加します。Trigger 1の「Global_TriggerPressDown_R」の枠を選択し、矢印をTrigger 2につなげます
同じように、Trigger 2をTrigger 1にもつなげましょう。

イベントの遷移を設定

このイベント遷移の設定は、トリガーボタンを押すたびに、弾丸が発射される仕組みとなります。

加えて、「Waiting for Trigger」にも「Global_TriggerPressDown_R」を設定し、Trigger 1につなげましょう。

イベント遷移の設定

これで、イベント遷移の設定ができました。

次にインタラクションの実装をするために、アクションを追加しましょう。

Waiting for Triggerに「Get Mouse Button Down」のアクションを追加します。

Get Mouse Button Down

Get Mouse Button DownGet Mouse Button DownはWEBブラウザー上でSTYLYを鑑賞・体験する際に、マウスのボタン操作がコントローラーのボタンの情報として入力されるようにするアクションです。

項目は以下のように変更します。
・Send Event : Global_TriggerPressDown_R(タブから選択)

Get Mouse Button Downの設定

次に、Trigger 1と2に弾丸を発射するアクションを追加します。

Trigger 1のStateタブを選択し、アクションブラウザーからアクションを追加しましょう。
今回使用するアクションは「Create Object」と「Get Mouse Button Down」です。
アクションブラウザーから追加しましょう。

「Create Object」と「Get Mouse Button Down」を追加

Create Objectこのアクションが発動すると、指定した3Dモデルが生成されます。

項目を以下のように設定しましょう。

  • Game Object:prefab化した「bullet」(プロジェクトからドラッグして指定)
  • Spawn Point:Hierarchy内の「Point」(Hierarchyからドラッグして指定)

Game Objectは生成する3Dモデルです。今回は弾丸を発射させる(生成する)ために、prefab化したbulletを選択しましょう。

Spawn PointはGame Objectをどの場所に生成するかを指定します。今回はPointが発射台となるため、Pointを選択しましょう。

Game Object / Spawn Pointの指定

次に、Get Mouse Button Downを設定します。

Get Mouse Button Downを設定

この状態の「Get Mouse Button Down」と「Create Object」をコピーし、Trigger 2にペーストしましょう。

Trigger 1のアクションをTrigger 2に複製

これで弾丸が発射されるインタラクションが完成しました。

STYLYへアップロード

最後に、STYLYへアップロードするために、発射台(Point)をprefab化しましょう。
Hierarchyからプロジェクト画面へドラッグし、prefabにします。

prefabにする

bulletのprefabもありますが、STYLYへアップロードするのは「Point」のみです。

詳しいアップロード方法はこちらを参照してください

サンプルSceneはこちらです
動作確認できます。

さまざまなアクションを実装してみましょう!