【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を使用してより自然な移動を実装する方が良いでしょう。

  • このエントリーをはてなブックマークに追加

PAGE TOP