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); // 力を加える
}
}
}
うまく飛びました。
そして最後に重大なミスに気づいてしまいました。
これハンバーガーじゃなくてチーズバーガーじゃん!!
次回は
次回は飛ばす方向や角度を変えて、ランダム感を出していきます。
コメント
最後少しじわるw
我ながらしょうもないです!