【Unity】AddForceを使ってハンバーガーを飛ばす(その1)

この記事は約4分で読めます。
今回のテーマ

UnityのAddForce関数の使い方

どうもなおゆです。新しく作るゲームで食べ物を上方向に飛ばしたいので、UnityのAddForceの使い方について備忘も兼ねて書いていきます。

スポンサーリンク

AddForceとは

オブジェクトを移動させる関数で、読んで字のごとくオブジェクトに力を加えて動かします。「Transform」を使ってもオブジェクトの移動は可能ですが、物理演算が反映されません。そのため「Rigidbody」コンポーネントが付いているオブジェクトは、できるだけ「AddForce」を使って移動させたほうが良いです。

コードの書き方(例)

例1) Rigidbody型の変数.AddForce(x軸, y軸, z軸);
例2) Rigidbody型の変数.AddForce(Vector3型の変数);
例3) Rigidbody型の変数.AddForce(Vector3型の変数, ForceModeの種類);

AddForceの種類( ForceMode )

一口にAddForce関数と言っても、力の加え方が4種類あります。AddForceの第2引数でForceModeを指定しますが、なにも指定しない場合はForceがデフォルト値として選ばれます。

  • Force
  • Acceleration
  • Impulse
  • VelocityChange

Forceとは

Rigidbodyの質量によって加わる力が変わります。継続的に力を与え続け、質量が大きいと動きにくく、質量が小さいと動きやすいです。

Accelerationとは

Rigidbodyの質量を無視して力を加えます。Forceと同じく継続的に力を与え続けます。

Impulseとは

Rigidbodyの質量によって加わる力が変わります。瞬間的に速度変化を加えるため、今回ハンバーガーを飛ばすのに使用します。

VelocityChangeとは

Rigidbodyの質量を無視して力を加えます。Impulseと同じく瞬間的に速度変化を加えます。

ハンバーガーを上に飛ばす

用意したオブジェクト

今回は第二引数のForceModeにImpulse」を指定して瞬間的な力を一回加えます。用意したオブジェクトは「茶色い床Floor」と「ハンバーガーのプレハブBurger Variant」です。

こっち↓が床。ハンバーガーがすり抜けないようにBox Colliderのコンポーネントを付けています。着地した時にバウンドするように物理マテリアルも付けました。

こっち↓がハンバーガーのプレハブ。物理演算するためのRigidbodyと、すり抜けないようにMesh Collider、そして動きを制御するためのFood Script(スクリプト)を付けています。

上に飛ばすコード

それではFood Scriptに以下のコードを書いていきます。

public class FoodScript : MonoBehaviour
{
    bool isHop = true; // ジャンプ済みかを判定するフラグ

    void FixedUpdate()
    {
        if (isHop)
        {
            isHop = false;  // ジャンプした
            Rigidbody rb = this.GetComponent<Rigidbody>();  // rigidbodyを取得
            Vector3 force = new Vector3(0.0f, 8.0f, 0.0f);  // 上
            rb.AddForce(force, ForceMode.Impulse);          // 力を加える
        }
    }
}

うまく飛びました。

そして最後に重大なミスに気づいてしまいました。

これハンバーガーじゃなくてチーズバーガーじゃん!!

次回は

次回は飛ばす方向や角度を変えて、ランダム感を出していきます。

コメント

  1. 吉岡蛍佑 より:

    最後少しじわるw

タイトルとURLをコピーしました