【初心者Unity】Rigidbody(物理演算)の使い方② -velocity-
1.ゲームオブジェクトの移動
ゲームオブジェクトを移動させる方法としては、以下の3つが考えられます。
■TranceformコンポーネントのPositionの値を変更する方法
例えば、ゲームオブジェクトのx座標の値を1秒ごとに+3していくような方法です。
Tranceform.Positionの値は、(0,0,0)⇒(3,0,0)⇒(6,0,0)⇒(9,0,0)⇒…と変化していきます。
1秒ごとに瞬間移動を繰り返すようなイメージです。
■Rigidbodyコンポーネントのvelocity(速度)を変更する方法
ゲームオブジェクト自体に速度を付与するような方法です。
途中で値を変えない限りは一定の速度(設定速度)で移動していきます。
■ゲームオブジェクトに外的な力を与えて移動させる方法
RigidbodyコンポーネントのAddForceという機能を使用する方法です。
力の与え方には4種類のモードがあり、一定の力を与え続けるものや、ドンッ!と瞬間的に押し出すようなもの等があります。
重力や空気抵抗、ゲームオブジェクトの質量などによって減速します。
本記事では、■Rigidbodyコンポーネントのvelocity(速度)を変更する方法について解説していきます。
2.実例
以下のような構成を用意しましょう。
各ゲームオブジェクトの設定は以下のようになっています。
■3D Object > Plane
・デフォルトから変更なし
■3D Object > Sphere
・Transform.Position の値変更
・Rigidbodyコンポーネント追加
(Add Component > Physics > Rigidbody)
・Scriptコンポーネント追加
(Add Component > New Script)
スクリプトには以下の内容を記述します。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class NewBehaviourScript : MonoBehaviour { // ゲームスタート時に一度だけ実行 void Start() { // Rigidbodyコンポーネントを変数rbに格納 Rigidbody rb = this.transform.GetComponent<Rigidbody> (); // Rigidbodyコンポーネントの項目velocityに、x軸方向に1.0fの大きさを設定 rb.velocity = new Vector3(1.0f, 0.0f, 0.0f); } }
速度はVector3で指定します。
Vector3とは、「方向」と「大きさ」の2つの要素を持ったデータ型であり、すなわちベクトル情報です。
各座標軸方向への大きさはfloat型で指定するため、数値の後ろにfが付いています。
大きさ1.0fは、1秒間に1unit(デフォルトのCube一辺分の長さ)進む程度の速さとして認識されます。
以上の構成が作成できたら、ゲームをスタートさせてみて下さい。
Sphereがx軸方向にゆっくりと進んでいく様子が確認できます。
3.注意点
今回紹介したvelocityを設定してゲームオブジェクトを移動させる方法は、多くの場合、物理的に不自然な挙動になります。
ゲームオブジェクトが、質量や重力、空気抵抗などを考慮せずに、一定の速度で移動し続ける、あるいは離散的に速度を変化させるためです。
ゲーム上の演出で敢えてそのような挙動にするのでなければ、AddForceを使用してより自然な移動を実装する方が良いでしょう。