【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を停止できるようになったのなら幸いです。