Menu
CoddyTech

跳ね返りと摩擦

CoddyのUnityジャーニー「物理演算とゲームプレイ」セクションの一部。レッスン 12/71。

コライダーの跳ね返り方や滑り方は、その PhysicsMaterial(Unity 6での名称。旧バージョンではPhysicMaterialと呼ばれていました)によって決まります。bouncinessは0(跳ね返らない)から1(速度をすべて保つ)までの値です。dynamicFrictionは滑っている物体の速度を落とし、staticFrictionは静止している物体が滑り始めるまでに必要な押す力を決めます。マテリアルのないコライダーは、摩擦0.6、跳ね返り0として動作します。このスーパーボールは、自分のコライダーに弾むマテリアルを設定します。

void Start()
{
    PhysicsMaterial mat = GetComponent<Collider>().material;   // このコライダー固有のコピー
    mat.bounciness = 0.9f;
    mat.bounceCombine = PhysicsMaterialCombine.Maximum;
}

接触するコライダーは2つあるため、Unityはそれぞれの値を組み合わせます。各マテリアルは、跳ね返りにはbounceCombine、摩擦にはfrictionCombineを使って組み合わせ方を選びます。どちらも4つのモード、Average(デフォルト)、Minimum、Multiply、Maximumのいずれかです。2つのコライダーが異なるモードを指定した場合、このリストで後にあるモードが優先されます。マテリアルのない床では、Averageを使うとボールの値は (0.9 + 0) / 2 = 0.45 になります。Maximumを使うと、跳ね返るたびに速度の0.9を保ちます。高さは速度の2乗に比例するため、高さは 0.9 x 0.9 = 81% になります。

.materialを使うと、このコライダー専用のマテリアルのコピーが作られるため、変更はこのコライダーだけに反映されます。.sharedMaterialはマテリアルアセットそのもので、それを使うすべてのコライダー間で共有されます。また、マテリアルが一度も割り当てられていないコライダーではnullになります。

challenge icon

チャレンジ

簡単

トランポリンと氷に、それぞれ独自の反発力と摩擦を設定しましょう。

  1. Start()で、PhysicsMaterial mat = GetComponent<Collider>().material;を使い、mat.bounciness = bounce;、mat.dynamicFriction、mat.staticFrictionにfrictionを設定します。
  2. mat.bounceCombine = PhysicsMaterialCombine.Maximum;とmat.frictionCombine = PhysicsMaterialCombine.Minimum;を設定して、表面独自の値が優先されるようにします。

「プレイ」を押すと、ボールはトランポリンで高く跳ね返ります。その後、「確認」を押します。

自分で試してみよう

using UnityEngine;

public class Surface : MonoBehaviour
{
    public float bounce = 0f;
    public float friction = 0.6f;

    void Start()
    {
        // この collider に bounce と friction を設定した専用の material を割り当てる
    }
}

物理演算とゲームプレイのすべてのレッスン

自分で練習してみよう: Unityプレイグラウンド