これは、UnityプロジェクトでRigid BodiesとPhysics Materialsを使ってオブジェクトを落下させたりバウンドさせたりする方法に関する基本的なチュートリアルです。



動画の書き起こし

皆さん、こんにちは!これは、UnityプロジェクトでRigid BodiesとPhysics Materialsを使ってオブジェクトを落下させたりバウンドさせたりする方法に関する基本的なチュートリアルです。

Unityは物理シミュレーションエンジンを提供していますが、これらの機能にアクセスするには、Rigid BodyやColliderなどのコンポーネントや他の要素を使用する必要があります。

これは、物理シミュレーションが計算負荷の高い処理であるため、デフォルトではオブジェクトがシミュレーションに参加しないようになっているからです。オブジェクトが物理的にどのように振る舞うかを指定するのは私たちの役割です。

それでは、始めましょう!

私はUnityで床としてCubeを使用し、バスケットボールのモデルを配置したシンプルなシーンをセットアップしています。

Cubeオブジェクト(Unityのネイティブオブジェクト)には既にBox Colliderコンポーネントがあることにすぐに気づきますが、外部ファイルから作成した3DモデルにはColliderコンポーネントが全くありません。この点については後で詳しく説明します。

バスケットボールのモデルをCubeの真上、一定の距離に配置しましたが、Playボタンを押すと、ボールが... 落下しないことにすぐに気づきます。

シーンの物理シミュレーションにボールを参加させるためには、単にオブジェクトのInspectorでRigid Bodyコンポーネントを追加する必要があります。

コンポーネントのタブにはいくつか興味深い機能があります。その中には質量(この例ではそのままにしておきます)や、デフォルトで選択されている「Use Gravity」チェックボックスがあります。これにより、ゲームを開始すると、実際にボールが落下することに気づきます...

...しかし、ボールは下のCubeを通り抜け、虚空に落ちてしまいます!

物理シミュレーションに両方のオブジェクトを参加させるために、下のCubeオブジェクトにも重力なしのRigid Bodyコンポーネントを追加することを考えるかもしれませんが、この仮定が問題を解決しないことをすぐに確認できます(混乱を避けるために、CubeからRigid Bodyを削除してください)。

簡単に言えば、ボールがCubeを通り抜けてしまいます... しかし、CubeにはBox Colliderがあるので、衝突を検出するはずです...

実際のところ、バスケットボールのモデルには独自のColliderがないため、Inspectorで追加する必要があります。バスケットボールは球形なので、このオブジェクトにはSphere Colliderを選択します。

これでシミュレーションを開始すると、ボールがCubeの上に落ちて、そこで止まるのがわかります。

つまり、Cube(一般的にはボールと相互作用するすべてのシーンオブジェクト)にも独自のColliderが必要であることを覚えておいてください!

それでは、要点をまとめましょう: 相互作用するためには、シーンの2つのオブジェクトの両方にColliderが必要です。そうでなければ、それらは幽霊のように振る舞います。 さらに、物理シミュレーションに参加するためには(つまり、重力や他の力の影響を受けるためには)、オブジェクトにRigid Bodyコンポーネントも必要です。

しかし、これまでの結果は満足のいくものではありません。ボールは落下して下のCubeに衝突しますが、バウンドしません!

オブジェクトのマテリアルの特性はRigid Bodyに割り当てるのではなく、Colliderに割り当てる必要があります。これらの特性は物理シミュレーションに参加するオブジェクト(つまり、Rigid Bodies)だけでなく、シーンのすべてのオブジェクトに関係するため、Colliderのタブで設定する必要があります。

このタブにはMaterialというフィールドがあり、デフォルトではNoneに設定されていますが、"Physic Material"オブジェクトを設定する必要があることを示唆しています。

それでは、プロジェクトにPhysic Materialオブジェクトを追加しましょう。注意: "Physic Material"であって、単なる"Material"ではありません。後者はオブジェクトの視覚的な側面に関係します。

次に、この新しいPhysic MaterialをバスケットボールのSphere Colliderに割り当て、Playボタンを押すと...ボールがバウンドしないことに気づきます。

これは、新しいPhysic Materialの弾性がデフォルトで0に設定されているためです。このオブジェクトを選択し、Inspectorでその特性を確認するとわかります。

Physic Materialには主に「Bounciness」と「Friction」という2つのプロパティがあり、これらを調整することでよりリアルなバウンド動作を作成できます。例えば、「Bounciness」を増やすとバウンドの力が強くなり、「Friction」を増やすと各バウンド後の移動距離が短くなります。

それでは、「Bounciness」を1(このフィールドの最大値)に設定してゲームを開始してみましょう。今回は、ボールが数回バウンドしてから止まります!

動作はリアルですが、ボールをもっとバウンドさせるにはどうすればいいでしょうか?

例えば、Frictionのパラメータや、特に2つのCombineパラメータに作用することができます。これらのパラメータは、2つのオブジェクトが接触したときに物理パラメータをどのように組み合わせるかを決定します。

Bounce Combineのデフォルト値はAverageですので、バスケットボール(Bouncinessを1に設定しました)と、物理マテリアルを持たないためUnityに0と見なされる下のCubeとの間で平均化されます。そのため、最終的なBounce値は実際には0.5になります。

Bounce CombineをMaximumに変更すると、今回の実際のBouncinessは1になり、ボールはさらに多くバウンドします...

...しかし、今度はボールがずっとバウンドし続けるという問題が発生します!

実際には奇妙な動作で、一定のバウンドを維持するためには、Bouncinessの値を0.965にする必要があるようです...理由は聞かないでください。

もちろん、バウンドをシミュレートする際には表面も重要です。したがって、CubeにもPhysic Materialを提供し、そのBouncinessを適切に設定する必要があります(ただし、異なる物理特性を持つ他の素材で作られた床、壁、および他のオブジェクトにも同様に適用されます)。

…しかし、これは皆さんにお任せします。Bounciness、Friction、およびCombineの異なる値でさまざまな組み合わせを試してみてください!

これでこのチュートリアルは終了です!またお会いしましょう!

チュートリアルを検索

フレーズ、または複数のキーワードをカンマで区切って入力してください。

Francesco Milaneseによる3Dモデル、チュートリアル、コンピューターグラフィックス関連の資料を掲載しています。3Dモデルの使用ライセンスは、各モデルのページに掲載されているリンク先の外部ストアで購入できます。ご利用には、適用されるライセンス条件が適用されます。 Francesco Milanese — イタリアVAT番号:06321250877。お問い合わせ:info@francescomilanese.com


プライバシー及びクッキーの使用に関する拡張情報の通知