Amazon Sumerian Tutorial 41:MeshCollider for a Torus

こんにちは、ナレコム前川です。

今回は、Amazon Sumerian の公式チュートリアルの

MeshCollider for a Torus を進めていきたいと思います。

ここでは、トーラス(ドーナツ型のオブジェクト)にMeshColliderを作成し、

落下させることで球に衝突させるなどの処理を行っていきます。

それでは、進めていきましょう。

1. シーンの作成

ここでは、このチュートリアルを進めていくにあたってシーンの環境を整えていきます。

① ダッシュボードから Default Lighting を選択。

② シーン名を「MeshCollider Tutorial」にし、シーンを作成。

※シーン名は自由につけて大丈夫です。

③ Create Entity を選択し、Quad を追加する。

③ Create Entity を選択し、Quad を追加する。

④ 追加されたら、Inspector パネルの Transform から以下のように設定。- X Rotation : -90- Scale : (10, 10, 10)

④ 追加されたら、Inspector パネルの Transform から以下のように設定。

- X Rotation : -90

- Scale : (10, 10, 10)

※床の色を変えたい場合は、Material -> Color などから変更してください。

今回、私は床の色を黄緑に設定してます。

⑤ Create Entity から Sphere を追加し、Transform を以下のように設定。

- Y Translation : 2.5

⑤ Create Entity から Sphere を追加し、Transform を以下のように設定。

- Y Translation : 2.5

- Scale : (3, 3, 3)

※こちらも自由に色を変えてください。⑥ Create Entity から Torus を追加し、Transform を以下のように設定。- Translation : (0, 4, -1)- X Rotation : 53

※こちらも自由に色を変えてください。

⑥ Create Entity から Torus を追加し、Transform を以下のように設定。

- Translation : (0, 4, -1)

- X Rotation : 53

これで、シーンの環境設定は終わりです。

2. Collider の追加

ここからは、衝突判定を行う Collider をオブジェクトに追加していきます。

① Quad を選択し、Collider コンポーネントを追加。

① Quad を選択し、Collider コンポーネントを追加。

② Shape を Infinite Plane に設定。

③ Sphere を選択し、Collider コンポーネントを追加。④ Shape を Sphere に設定。

③ Sphere を選択し、Collider コンポーネントを追加。

④ Shape を Sphere に設定。

3. Torus に MeshCollider の追加

ここでは、先ほど追加した Torus に MeshCollider を追加していきます。

Torus は、Collider の Shape で衝突判定が指定ができないため、Script で設定していきます。

① Torus を選択し、Script コンポーネントを追加。

① Torus を選択し、Script コンポーネントを追加。

② + ボタンをクリックし、新しい Script を作成。

③ Custom を選択し、Instance Of をクリック。④ Script 名を 「createMeshCollider」 に変更。

③ Custom を選択し、Instance Of をクリック。

④ Script 名を 「createMeshCollider」 に変更。

⑤ Script を Edit モードにして setup function 内を以下のコードと置き換える。
1function setup(args, ctx) {2      const mesh = ctx.entity.meshDataComponent && ctx.entity.meshDataComponent.meshData;3      if(mesh) {4          // Create Collider component with MeshCollider5          if(!ctx.entity.colliderComponent) {67             const colliderComponent = new sumerian.ColliderComponent({collider: new sumerian.MeshCollider({meshData: mesh})});8              ctx.entity.setComponent(colliderComponent);9          } else {10              console.log("Entity already has a ColliderComponent - not adding another");11          }1213         // Create RigidBody component14          if(!ctx.entity.rigidBodyComponent) {15             const rigidBodyComponent = new sumerian.RigidBodyComponent({isKinematic:false});16             ctx.entity.setComponent(rigidBodyComponent);17             ctx.entity.rigidBodyComponent.initialize();            18          } else {19              console.log("Entity already has a Rigid Body Component, skipping add and initialization.");20          }21     }22 }

Edit 画面だと以下のようになるはずです。

それでは、シーンを実行してみてください。

正常に実行される場合は、球にトーラスが衝突して回転しながら床に落下します。

私が実行した際には、なぜか球にトーラスが張り付いてしまいました。。。

このようになった際は、Sphere のScale を (2, 2, 2) に変更し、位置を衝突するかしないかくらいに移動してみてください。

※私は Z Translation を 0.3 に設定しました。

そうすると以下のようになりました。

今回のチュートリアルは以上です。

お疲れ様でした。

この記事を書いた人

aws-recipe-user