この記事ではコントローラーのトリガーボタンを入力することで、インタラクションを引き起こす方法を説明します。
ボタン入力によるインタラクションを実装することで、空間への没入感を高めることができます。
この記事を理解することで、以下のようなインタラクションを作れます。
事前準備
UnityのプラグインであるPlayMakerをあらかじめインストールしておきましょう。
はじめてPlayMakerを使用するひとは、あらかじめ以下の記事を一読することで、理解を深めることができます。
概要
STYLY上には、あらかじめ、「Global_TriggerPressDown_R(右コントローラーボタン)」と「Global_TriggerPressDown_L(左コントローラーボタン」のグローバルイベントが組み込まれています。
この2つのグローバルイベントと、アクションを組み合わせることによって、インタラクションを引き起こすことができます。
今回は例として、コントローラーのボタンを入力すると、弾丸が発射される仕組みを設計します。
大きな流れは以下になります。
- 弾丸を作る
- PlayMakerで弾丸のアクションを設定する
- 発射台を作る
- PlayMakerで発射台のアクションを設定する
弾丸を作る
最初に、弾丸を作ります。
Hierarchy上で、Hierarchy上で、右クリックをし「Create > 3D Object > Sphere」を選択します。すると、Sphereが作られ、弾丸となります。
Sphereが作られたら、Inspecterの画面を開きます。弾丸の設定をします。
名前:bullet
Positionを ( X, Y, Z ) = ( 0, 0, 0)
Scaleを ( X, Y, Z ) = ( 0.5, 0.5, 0.5 )
このbulletにPlayMakerでアクションを加えます。
PlayMakerで弾丸のアクションを設定する
bulletを選択した状態で、PlayMaker Editorを開き、右クリックで「Add FSM」を選択しFSMを追加します。赤い「玩」というアイコンがbullet上に表示されたら、FSMが追加された状態です。
FSMを追加したら、「State 1」の名前を「bullet action」に変更しましょう。
つぎに、アクションを追加します。アクションを追加するには、Stateタブを選択した状態で、右下の「Action Browser」を選択し、ブラウザーから使用するアクションを選択します。
今回使用するアクションは「Translate」と「Destroy Object」です。
一番上の検索欄より、TranslateとDestroy Objectを検索し、State内に追加しましょう。
アクションが追加されたら、設定をします。
Translate:3Dモデルを移動させるアクションです。
以下のように設定します。
Xには、=アイコンを選択して、5を入力します。
Spaceは、Selfを入力してください。
Spaceは、World(ワールド座標)とSelf(ローカル座標)の2種類あります。
ワールド座標は原点から見た座標、ローカル座標は親からみた相対的な座標です。
今回は、発射台を回転させたり位置を変更したときに、発射台の座標に相対的に弾丸の座標も変わってほしいので、Selfにしてあります。
これでbulletに移動(発射)のアクションが追加されました。
次に、Destroy Obectを設定します。
Destroy Object:対象の3Dモデルが消滅するアクションです。
Destroy Objectを設定しないと、bulletを発射した際に、残り続けてしまうためです。
以下のように設定します
- Game Object : Hierarchy内の「bullet」をドラッグして設定
- Delay : 5に設定
DelayはGame Objectが消えるまでの時間です。今回は5秒後にbulletが消滅するように設定しました。
これで弾丸(bullet)の設定ができました。
最後に、bulletをプロジェクトビューにドラッグして、prefab化しましょう。
prefabにしましたら、Hierarchy内のbulletは削除します。
次に、発射台をつくります。
発射台を作る
Hierarcy上で、右クリックをし「Create > 3D Object > Cube」を選択します。
Cubeが作られ、弾丸の発射台となります。
Cubeの設定をしましょう。以下のように設定します
- 名前:Point
- Position / Rotation : ( X, Y, Z) = ( 0, 0, 0 )
- Scale : ( X, Y, Z ) = ( 1, 1, 1 )
Cubeのアクションを追加します。
PlayMakerで発射台のアクションを設定する
Cubeを選択した状態で、PlayMaker Editor上で右クリックをします。
メニューが開かれるので「Add State」を選択し、「State 1」が追加されました。
State 1の名前を、「Waiting for Trigger」とします。
次に、Stateを2つ追加します。
PlayMaker Editor上で右クリックし、「Add 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/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 DownはWEBブラウザー上でSTYLYを鑑賞・体験する際に、マウスのボタン操作がコントローラーのボタンの情報として入力されるようにするアクションです。
項目は以下のように変更します。
・Send Event : Global_TriggerPressDown_R(タブから選択)
次に、Trigger 1と2に弾丸を発射するアクションを追加します。
Trigger 1のStateタブを選択し、アクションブラウザーからアクションを追加しましょう。
今回使用するアクションは「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を選択しましょう。
次に、Get Mouse Button Downを設定します。
この状態の「Get Mouse Button Down」と「Create Object」をコピーし、Trigger 2にペーストしましょう。
これで弾丸が発射されるインタラクションが完成しました。
STYLYへアップロード
最後に、STYLYへアップロードするために、発射台(Point)をprefab化しましょう。
Hierarchyからプロジェクト画面へドラッグし、prefabにします。
bulletのprefabもありますが、STYLYへアップロードするのは「Point」のみです。
詳しいアップロード方法はこちらを参照してください
サンプルSceneはこちらです
動作確認できます。
さまざまなアクションを実装してみましょう!