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

unityでゲームを製作しているとRigidbodyを追加したオブジェクトを停止させたい場面があるかと思います。
そこでこの記事ではRigidbodyを追加したオブジェクトを停止させる方法について解説します!
この記事の目次
できるようになること
1.動いているオブジェクトを停止させる
2.重力を停止させる
動いているオブジェクトを停止させる
今回は下記のように移動している玉をスペースキーを押すことで停止させてみたいと思います。

最初の段階のコードは、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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を停止させるには、
1 2 | //Rigidbodyを停止 Rigidbody.velocity = Vector3.zero; |
と記述します。
これはRigidbodyの速度(velocity)をゼロにするという意味になります。
現実世界で考えるとわかりやすいのですが、速度がゼロになった車は停止しますよね?
それと同じ理屈でRigidbodyの速度がゼロになったオブジェクトは停止します。
スペースキーでRigidbodyを停止させる
それでは実際にスペースキーを押した時にRigidbodyを停止させるコードを書いていきましょう。
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 | 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が停止していますね!
重力を停止させる
次は下記のように落下している玉を、スペースキーを押したら重力が停止して空中に浮かぶようにしたいと思います。

最初の段階のコードは、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | using System.Collections; using System.Collections.Generic; using UnityEngine; public class NewBehaviourScript : MonoBehaviour { //変数を作る Rigidbody rb; //ゲーム起動時に呼び出される void Start() { //Rigidbodyを取得 rb = GetComponent<Rigidbody>(); } } |
重力を停止させるには
重力を停止させるには、
1 2 | //重力を停止させる Rigidbody.isKinematic = true ; |
と記述します。
これはRigidbodyのisKinematicを有効状態にすることを意味します。
isKinematicとはon/offの切り替えができ、onなら重力などの物理現象が適応されず、offなら適応されるといったものです。
onの時に適応されないのがポイントですね。
スペースキーで重力を停止させる
それでは実際にスペースキーを押した時に重力を停止させるコードを書いていきましょう。
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 | 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を停止できるようになったのなら幸いです。