Unity:物理マテリアルの作り方と使い方

Unity
スポンサーリンク

Unityでオブジェクト同士の跳ね返り摩擦を調整したい時に利用する物理マテリアル正式名称は物理特性マテリアル)について解説します。

例として床にボールを弾ませる(バウンドさせる)床のキューブを滑らせるの2点について実践してみます。

スポンサーリンク

プロジェクトの準備

プロジェクトを新規作成します。

Create > 3D Object からPlaneを作成しておきます。

とりあえずこんな視点にしておきます。(色は分かりやすいようにマテリアルを使ってつけてあります)

これをとします。

床に落ちてくるボールも作っておきます。

Create > 3D Object > Sphere として球体を作ります。

少し床(Plane)の上方に配置しておきます。(色は適当にマテリアルでつけました)

とりあえず床に落としてみます。

Sphereを選択してInspectorウインドウのAdd Componentボタンをクリック、

Phisics > Rigidbody

として重力を適用させておきます。

とりあえずこの状態で実行確認してみます。

物理マテリアルを設定していない床では落ちても弾みません
次に物理マテリアルを作って違いを確認してみます。

物理マテリアルを作る

物理マテリアルを作ります。

Assetsウインドウの中の何もないところで

右クリック > Create > Physic Material を選択します。

名前はyukaとしておきます。(物理マテリアルのアイコンは分かりやすいですね!)

作成したyukaをクリックしてInspectorウインドウを見てみてください。

デフォルトではこのような設定になっているかと思います。

細かい説明は後にして、とりあえず使ってみます。

物理マテリアルを床に適用する

物理マテリアルをシーン上のオブジェクトに適用するにはドラッグ&ドロップするだけです。

物理マテリアルは、オブジェクトのColliderに追加されるようになっています。

Planeをクリックし、Inspectorウインドウを見ると物理マテリアルがMesh Collider(Planeオブジェクトの場合)にMaterialとして追加されているのが分かります。

ドラッグ&ドロップ以外での物理マテリアル追加方法として、ColliderのMaterialにある右端の◎をクリックしてAssetsに存在する物理マテリアルを選択することも出来ます。(物理マテリアルの設定を無効にする場合はこのウインドウでNoneを選択します)

再度、実行確認してみましょう。

全然変わりません!
物理マテリアルのデフォルト設定では弾まないことが分かります。

これでは意味がないので、物理マテリアル(yuka)のプロパティBouncinessを0から1に変更して実行してみます。

これで自然な感じで弾むようになりました。

ちなみにBounceは0.0~1.0の範囲の値をとります。0が弾まない1が弾む最大値と考えてください。

物理マテリアルをきちんと扱うには物理マテリアルのプロパティについて理解する必要があります。
次の項目で詳しく見ていきます。

物理マテリアルのプロパティ

いきなりですが、公式マニュアルが詳しいです!(当たり前だけど)

物理特性マテリアル - Unity マニュアル
物理特性マテリアル は、衝突するオブジェクトの摩擦や跳ね返り効果を調整するのに使用されます。

まず公式マニュアルを見るのが基本だと思います。
読んでも分からないことも多いんですが、個人的にはマニュアルを読むのが好きです。

一応公式マニュアルを簡略化した説明です。

全然簡略化されていませんね!

Bounce、Bounciness弾み関係、Frictionという言葉が摩擦関係と覚えておけば大丈夫です。

実際に使ってみましょう。

【実例1】床にボールを弾ませる

ここまでの状態ですでにボールが弾みますが、プロパティを調整してみます。

yuka(物理マテリアル)のBounce CombineMaximumにしてみてください。

Bounce CombineのMaximumは、2つの物体の弾みの大きい方の値をとるため、実行すると最大の弾みとなります。

この設定は、一見ボールの元の高さまで弾んでいるように見えますが、違います。
5分ほどそのまま実行していたら、ボールが見えない位置まで弾むようになってしまいました。要するにどんどん高く弾んでいく状態です。(重力を無視していますね)

弾み方が予想と違うようならBouncinessの値を0.95などと微調整する必要がありますね。(ちなみに0.98でもどんどん高くなりました)

【実例2】床のキューブを滑らせる

Sphereでは滑り具合が分かりにくい為、Sphereは一旦シーンから削除します。

Create > 3D Object > Cube

として立方体を作って下さい。

Cubeを床の上方に配置します。

InspectorウインドウのAdd Componentボタンで Physics > Rigidbody を追加します。

物理マテリアル(yuka)のプロパティを変更していなければ、先ほどのSphere同様にCubeは弾むと思います。

床を滑らせてみる為に物理マテリアルのプロパティ値を次のように変更します。

Dynamic Friction0とすると移動している物体の摩擦が0となります。
跳ね返りが大きいと滑っているか確認できないため、Bounciness0としておきます。
Friction CombineMinimumとすることで、最初に設定したDynamic Frictionの値が生きてきます。要するに床の摩擦は0となるわけです。

物体を垂直に落としただけでは滑りませんので、床(Plane)を少し傾けておきます。

Planeを選択し、InspectorウインドウのTransform > Rolationの項目を変更します。

わたしの場合、X軸-20 として手前に滑ってくるように傾けました。
ご自身のシーン上の視点によりX軸またはZ軸方向の傾きの値を変更してみてください。

では実行してみます。

うまく滑り落ちてきました。

試しにStandard AssetsにあるThirdPersonCharacterをこの床においてみました。
じっとしていたら微妙に滑り落ちていきました。(非常にゆっくりですが…)

以上、Unity:物理マテリアルの作り方と使い方でした。

スポンサーリンク
Unity
スポンサーリンク
dennouをフォローする
電脳産物

コメント