(JP) 【Unity/Playmaker】コントローラーを3Dモデルに衝突させて動かす方法

この記事では、Playmakerを利用した、コントローラー情報の取得と、Rigidbody・Colliderを利用した衝突と物理動作について説明します。

空間上に配置されている3Dモデルとコントローラーが衝突し、3Dモデルが動くアクションを実装します。

通常のオブジェクトに触れても、コントローラーは特に何もおきず、通過してしまいます。この状態だと、空間として不自然です。3Dモデルにふれると、3Dモデルが衝突によって動くインタラクションを実装します。

 

サンプル

3Dモデルと衝突

 

 

Unityの基礎的な情報として、衝突判定の際に使用する「Collider」と、物理作用を引き起こす「Rigidbody」の、2つのコンポーネントについて説明します。

 

Rigidbody

以上の2つのコンポーネントが3Dモデルに衝突のインタラクションを引き起こすのに必要な要素となります。

3Dモデルに「Collider」と「Rigidbody」を、コントローラーに「Collider」を付与することで、衝突のインタラクションを引き起こすことができます。

大きな流れは、

 

作成したCubeに衝突判定を取得する「Collider」を付与しましょう

【 Collider 】

Colliderは衝突判定を計算するコンポーネントです。対象の3Dモデルに付与することで、他の3Dモデルに触れたときに「衝突した」という情報が取得されます。

 

Collider

通常、Unityのシーン上で作ったCubeやSphereには初期状態で付与されていますが、インポートした3Dモデルには付与する必要があります。

付与する場合には、Inspecter内の、「Add Component」から付与することができます。

 

付与するモデルの形に合わせてColliderを選択しましょう。

Colliderを付与することで、3Dモデルに衝突判定が取得されるようになりました。

 

次に衝突させる3DモデルにRigidbodyを付与します。

【 Rigidbody 】

Rigidbodyは衝突判定を計算し、物理作用を実行するコンポーネントです。つまり、Colliderが付与されている3Dモデルが衝突した際、Rigidbodyが付与されていると、衝撃によって3Dモデルが動くようにしてくれます。

Rigidbodyを付与するには、Add Componentより「Rigidbody」を選択しましょう。

Rigidbodyを追加

Rigidbodyを付与しましたら、設定項目の「Use Gravity」のチェックマークを外しましょう。

Use Gravityのチェックを外す

 

これで、衝突する3Dモデルの設定が出来ました。

・Collider
・Rigidbody

を付与することで、衝突のアクションを追加することができます。

次に、コントローラーに衝突の設定をします

コントローラーオブジェクトそのものに衝突の設定をすることはできません。
シーンないに「Collider」を追加し、コントローラーの子オブジェクトとして追従させることで、コントローラーに衝突の設定をすることができます。

 

イメージ図

まず、最初にHierarchy内に「Create Empty」で空のオブジェクトを作ります。名前を「Controller Collider」とします。

 

名前を変更

Add Componentから、Sphere Colliderを追加し、Sphere ColliderのRadiusを「0.05」に設定します。

Sphere Colliderを追加

作成したSphere ColliderはPrefab化し、hierarchyから削除しましょう。

 

Prefab化

次に、コントローラーの設定をします。

あらかじめ、コントローラーの情報を取得するオブジェクトを作ります。

Hierachy内に「Create Empty」で空のオブジェクトをつくり、名前を「Controller」にしましょう。
「Controller」を選択し、その中に2つからのオブジェクトをつくり、名前を「Controller (right)」「Controller (left)」とします。
このController (right)/(left)にPlaymakerでアクションを追加します。

Controller (right)/(left)

Controller (right)を設定します。

大まかな流れは以下のようになります。

①「Find game object」でシーン内のコントローラーを見つける。
②「Get Position」でコントローラーの空間座標を取得する。
③「Create Object」で先ほど作成した「Controller Collider」をシーン内のコントローラーの位置に出現させる。
④「Set Parent」でColliderをコントローラーの子オブジェクトにし、コントローラーに追従させる。

Controller (right)にFSMを追加しましょう。

Controller (right)を選択した状態で、Playmaker Editorを右クリックし、「Add FSM」を選択します。

Add FSM

Add FSMを選択すると、State 1が追加されます。
State 1を選択し、右の「State」タブの右下にある「Action Browser」を選択し、開きましょう。

Action Browserをひらく

Action Browserから今回設定する「Find Game Object」「Get Position」「Create Object」「Set Parent」を追加しましょう。

 

4つのアクションを追加

①「Find game object」でシーン内のコントローラーを見つける。

Object Nameを「Controller (right)」とします。
次にStoreをメニューバーを開き「New variable…」を選択し、名前を「Controller」にします。
これで、シーン内の右コントローラーが検索され、「Controller」という変数に格納されるようになりました。

Find Game Objectを設定

②「Get Position」でコントローラーの空間座標を取得する。

Game objectのメニューバーを開き、「Specify Game Object」を選択します。
メニューバーの横の右の二本線のボタンを押し、Find Game Objectで作成した「Controller」変数を指定します

Vectorのメニューバーの「New variable…」を選択し、名前を「Controller Position」とします。
これでシーン内のコントローラーの空間座標が、「Controller Position」という変数に格納されるようになりました。

 

Get Positionを設定

③「Create Object」で先ほど作成した「Controller Collider」をシーン内のコントローラーの位置に出現させる。

Game objectに、Prefab化した「Controller Collider」をドラッグし、追加します。

Positinは、Get Positionで作成した変数「Controller Position」を指定します。

Store Objectのメニューバーを開き、「New variable…」を選択し、名前を「Created Controller Collider」とします。
これでシーン内のコントローラーの位置にColliderが出現し、「Created Controller Collider」という変数に格納されるようになりました。

Create Objectを設定

④「Set Parent」でColliderをコントローラーの子オブジェクトにし、コントローラーに追従させる。

Set Parentは「シーンに生成したColliderをコントローラーの子オブジェクトにして、コントローラーに追従させる」ことができます。

Game objectにCreate Objectで作成した変数「Created Controller Collider」を指定します。
Game objectのメニューバーを選択し、「Specify Game Object」を選びます。
項目横の二本線のボタンを押して変数を指定できるよう切り替えて、先ほど作成した「Created Controller Collider」という変数を指定します。

Parentを設定します。
右の二本線のボタンを押して変数を指定できるよう切り替えたら、「Controller」を選択します。

これでシーン内に生成したColliderがコントローラーの子オブジェクトになり、コントローラーに追従するようになりました。

Set Parentを設定