【unity入門】Rigidbodyを停止させる方法

unityでゲームを製作しているとRigidbodyを追加したオブジェクトを停止させたい場面があるかと思います。

そこでこの記事ではRigidbodyを追加したオブジェクトを停止させる方法について解説します!

できるようになること

1.動いているオブジェクトを停止させる
2.重力を停止させる

動いているオブジェクトを停止させる

今回は下記のように移動している玉をスペースキーを押すことで停止させてみたいと思います。

最初の段階のコードは、

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour {

    //変数を作る
    Rigidbody rb;

    //ゲーム起動時に呼び出される
    void Start()
    {
        //Rigidbodyを取得
        rb = GetComponent<Rigidbody>();

        //動かす
        rb.AddForce(10, 0, 0);

    }
}

Rigidbodyを停止させるには?

Rigidbodyを停止させるには、

//Rigidbodyを停止
Rigidbody.velocity = Vector3.zero;

と記述します。

これはRigidbodyの速度(velocity)をゼロにするという意味になります。

現実世界で考えるとわかりやすいのですが、速度がゼロになった車は停止しますよね?

それと同じ理屈でRigidbodyの速度がゼロになったオブジェクトは停止します。

スペースキーでRigidbodyを停止させる

それでは実際にスペースキーを押した時にRigidbodyを停止させるコードを書いていきましょう。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour {

    //変数を作る
    Rigidbody rb;

    //ゲーム起動時に呼び出される
    void Start()
    {
        //Rigidbodyを取得
        rb = GetComponent<Rigidbody>();

        //動かす
        rb.AddForce(10, 0, 0);

    }

    //毎フレーム(いっぱい!)ごと呼ばれる
    void Update()
    {
        //もしスペースキーが押されたら
        if (Input.GetKey(KeyCode.Space))
        {
            //Rigidbodyを停止
            rb.velocity = Vector3.zero;
        }
    }
}

実行結果

実行結果は、

見事にRigidbodyが停止していますね!

重力を停止させる

次は下記のように落下している玉を、スペースキーを押したら重力が停止して空中に浮かぶようにしたいと思います。

最初の段階のコードは、

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour {

    //変数を作る
    Rigidbody rb;

    //ゲーム起動時に呼び出される
    void Start()
    {
        //Rigidbodyを取得
        rb = GetComponent<Rigidbody>();

    }

}

重力を停止させるには

重力を停止させるには、

//重力を停止させる
Rigidbody.isKinematic = true;

と記述します。

これはRigidbodyのisKinematicを有効状態にすることを意味します。

isKinematicとはon/offの切り替えができ、onなら重力などの物理現象が適応されず、offなら適応されるといったものです。

onの時に適応されないのがポイントですね。

スペースキーで重力を停止させる

それでは実際にスペースキーを押した時に重力を停止させるコードを書いていきましょう。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour {

    //変数を作る
    Rigidbody rb;

    //ゲーム起動時に呼び出される
    void Start()
    {
        //Rigidbodyを取得
        rb = GetComponent<Rigidbody>();

    }

    //毎フレーム(いっぱい!)ごと呼ばれる
    void Update()
    {
        //もしスペースキーが押されたら
        if (Input.GetKey(KeyCode.Space))
        {
            //重力を停止させる
            rb.isKinematic = true;
        }
    }
}

実行結果

実行結果は、

見事に停止していますね!

まとめ

今回は、移動しているRigidbodyの停止重力の停止をやりました。

この記事を読んでRigidbodyを停止できるようになったのなら幸いです。