2つのPhysics Material(物理マテリアル)を用意して、条件によってどちらかへ切り替えるスクリプトを作ってみましょう。
Cubeをクリックすれば、前方へ滑るように動きますが、1秒経過すれば滑りが無くなってストップします。
それぞれのDynamic Frictionの数値を変えることで、摩擦のオン、オフを切り替えています。
Physics Materialの作成
平面とCubeを作成し、Cubeの配置を変更します。
Cubeにリジッドボディを追加します。
物理マテリアル(Physics Material)を2つ作成します。
プロジェクトビューを右クリック > 作成 > 物理マテリアル
物理マテリアルの名前を変更します。
一つはSlipMaterial、もう一つはNonSlipMaterialとしました。
SlipMaterialの「Dynamic Friction」を0に変更します。
NonSlipMaterialの「Dynamic Friction」を1に変更します。
Dynamic Frictionは、移動している物体に対する摩擦。
0~1 の範囲で設定し、0に近づくほど、氷のようによく滑るようになります。
1に近づけば近づくほど、摩擦が強くなり、強い力で押さない限り、すぐに止まります。
条件によってPhysics Materialを切り替え
続いて、Physics Materialを切り替えできるように、スクリプトを作成します。
CubeMove.csを作成し、Cubeに追加します。
CubeMove.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeMove : MonoBehaviour { private Rigidbody rb; public int force; private BoxCollider collider; public PhysicMaterial slip; public PhysicMaterial nonSlip; private float time; void Start () { rb = GetComponent<Rigidbody>(); collider = GetComponent<BoxCollider>(); force = 10; time = 0; } void Update() { time -= Time.deltaTime; if (Input.GetMouseButtonDown(0)) { time = 1; rb.AddForce(0, 0, force, ForceMode.Impulse); } if (time <= 0) { collider.material = nonSlip; } else { collider.material = slip; } } } |
SlipとNonSlipというフィールドが出来ていますので、ここに2つの物理マテリアルを追加します。
ゲームプレイして、クリックしてみましょう。
はじめはよく滑りますが、1秒後に滑りが悪くなり、Cubeにブレーキがかかります。
2種類のPhysics Materialを、条件によって差し替えています。