【unity入門】AddForceを使ったRigidbody2dの移動
![](https://mogi0506.com/wp-content/uploads/2019/03/stephanie-harvey-431242-unsplash-1024x600.jpg)
unityで2dアクションゲームを作りたい場合、Rigidbody2dを使うことになると思います。
そこで、この記事ではAddForce関数を使ったRigidbody2dの移動について解説していきます!
この記事の目次
今回作るもの
今回は横スクロールっぽい、矢印キーでプレイヤーを動かすものを作っていきます。
![](https://mogi0506.com/wp-content/uploads/2019/03/名称未設定.mov-28.gif)
やること
1.ステージとプレイヤーの作成
2.Rigidbody2dを追加
3.AddForce関数を使って移動させる
ステージとプレイヤーの作成
canvasの作成
unity2Dでプロジェクトを作ったら、まずはcanvasを作成しましょう。
Create>UI>Canvasで作成できます。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-02-23.43.59.png)
canvasの設定
canvasを作成したら、カメラがcanvasを映すように設定しましょう。
unityではカメラが映した映像がゲーム画面となるので、canvasがゲーム画面となることを意味しています。
カメラがcanvasを映すように設定するにはcanvasオブジェクトを選択した状態で、canvasコンポーネントのRenderModeを『Screen Space- Camera』に変更します。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-02-23.51.28.png)
これで、カメラがcanvasを映すようになりました。
次にどのカメラオブジェクトがcanvasを映すのか設定します。
そのためにRender Camaraの部分にCameraオブジェクトをドラッグ&ドロップします。
![](https://mogi0506.com/wp-content/uploads/2019/03/名称未設定.mov-1.gif)
地面の作成
次は地面を作っていきます。
今回はcanvasの中にimageオブジェクトを作成して地面を作ります。
imegeオブジェクトを作るにはHierarchyビューでCreate>UI>imageで作成できます。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-25-13.56.22.png)
適当な色に変更しましょう。
色を変更するにはimageオブジェクトを選択した状態で、
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-25-14.04.33.png)
inspectorビューからColorを押し、
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-25-14.02.15-1.png)
適当に好きな色に変更することで変更でできます。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-25-14.02.57.png)
ぼくは黄緑色にしてみました。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-25-14.12.46.png)
このオブジェクトは地面にするので大きさを変更します。
大きさを変えるには、sceneビューの左上にある四角いボタンを押すと変更できるようになります。
![](https://mogi0506.com/wp-content/uploads/2019/03/名称未設定.mov-26.gif)
次に位置を変更していきます。
位置はsceneビューの左上にある十字キーのようなボタンを押すと変更できます。
![](https://mogi0506.com/wp-content/uploads/2019/03/名称未設定.mov-27.gif)
地面はこんな感じになりました。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-25-14.06.36.png)
プレイヤーの作成
プレイヤーも地面と同じようにして作っていきます。
hierarchyビューからcreate>UI>imageでimageオブジェクトを作成してください。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-25-14.08.15.png)
適当に地面の上にいるように移動させます。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-25-14.10.33.png)
コライダー の適応
あとでプレイヤーにRigidbody2dコンポーネントを追加して重力を適応するのですが、このままの状態では落っこちてしまいます。
コライダー という衝突を検知するためのコンポーネントが追加されていないからです。
ですので、プレイヤーと地面にコライダー コンポーネントを追加しましょう。
地面とプレイヤーを選択した状態で、
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-25-14.31.16.png)
inspectorビューからAddCompornent>Physics2Dを押し、
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-25-14.31.42.png)
BocCollider 2Dを選択することで追加されます。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-25-14.31.55.png)
コライダー を追加したら大きさを調整します。
コライダー の大きさを調整します。
地面オブジェクトを選択して、
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-25-14.39.33.png)
コライダー の大きさをオブジェクトの大きさと同じにしてください。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-25-14.41.53.png)
プレイヤーも同じようにコライダー の大きさを変更します。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-25-14.46.52.png)
これでプレイヤーが地面の上に乗っかるようになりました!
Rigidbody2dを追加
プレイヤーにRigidbody2dを追加して物理現象を適応していきます。
プレイヤーのオブジェクトを選択した状態でAddComponent>Physics 2D
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-25-14.53.39.png)
Rigidbody2Dを押すことで追加されます。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-25-15.11.31.png)
これでプレイヤーにRigidbody2Dコンポーネントが追加され、物理現象が適応されるようになりました。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-25-15.14.13.png)
AddForce関数を使ったコードの記述
スクリプトの作成
プレイヤーを動かすコードを記述するためにスクリプトを作成します。
HierarchyビューからCreate>C#Scriptを選択することで作成できます。
![](https://mogi0506.com/wp-content/uploads/2019/03/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88-0031-03-24-13.59.19.png)
スクリプトの追加
スクリプトを作成したらオブジェクトにコンポーネントとして追加しましょう。
今回はプレイヤーを動かしたいのでプレイヤーにスクリプトを追加します。
追加の仕方は、スクリプトをプレイヤーオブジェクトにドラッグ&ドロップです。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-25-15.18.55.png)
これでスクリプトがコンポーネントとして追加されました。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-25-15.20.44.png)
方向キーの入力を受け取る
今回は方向キーが押された方向に力を加えてプレイヤーを動かします。
ですので、まずは方向キーがどの方向に押されたのか判断するためのコードを記述します。
コード内容は、
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
//一秒間に一定の回数呼ばれる
void FixedUpdate()
{
// 入力をxに代入
float x = Input.GetAxis("Horizontal");
}
}
簡単に解説すると、FixedUpdate関数は{ }の中に書いた記述が一秒間に一定の回数呼ばれます。
FixedUpdate関数の中に記述された
// 入力をxに代入
float x = Input.GetAxis("Horizontal");
は水平方向、つまり矢印キーの左右の入力を-1から1までの小数で返します。
左のキーを押している間は-1に段々と近づいていき、ずっと押していると-1に至ります。
反対に右のキーを押している間は1に段々と近づいていき、ずっと押していると1に至ります。
そしてその-1から1までの値を変数『x』に格納します。
Rigidbodyを取得
今回はプレイヤーに追加されたRigidbodyコンポーネントに力を加えることで移動させるのでした。
ですので、コードの中でRigidbodyに力を加えられるようにプレイヤーに追加されたRigidbodyコンポーネントを取得しましょう。
Rigidbodyコンポーネントを取得するコードは、
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
//一秒間に一定の回数呼ばれる
void FixedUpdate()
{
// 入力をxに代入
float x = Input.GetAxis("Horizontal");
//Rigidbody2Dを取得
Rigidbody2D rb = GetComponent<Rigidbody2D>();
}
}
今回追加されたのは、
//Rigidbody2Dを取得
Rigidbody2D rb = GetComponent<Rigidbody2D>();
ですね。
簡単に説明をすると、GetComponent()という関数はスクリプトが付いているオブジェクトのcomponentを取得します。
GetComponentの後ろにある『<>』はcomponentの種類を表しています。
ですので、GetComponent<Rigidbody2D>()はRigidbodyの取得という意味です。
今回は、
Rigidbody2D rb = GetComponent<Rigidbody2D>();
ですので、Rigidbodyを取得してRigidbody2D型の変数『rb』に格納しています。
変数『rb』は適当に決めたものですので、わかりやすければなんでも構いません。
AddForceで力を加える
それではAddForce関数を使ってRigidbodyに力を加える記述をしていきます。
記述内容は、
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
//一秒間に一定の回数呼ばれる
void FixedUpdate()
{
// 入力をxに代入
float x = Input.GetAxis("Horizontal");
//Rigidbody2Dを取得
Rigidbody2D rb = GetComponent<Rigidbody2D>();
//x軸に加わる力を格納
Vector2 force = new Vector2(x*10, 0);
//Rigidbody2Dに力を加える
rb.AddForce(force);
}
}
今回追加された部分は
//x軸に加わる力を格納
Vector2 force = new Vector2(x*10, 0);
//Rigidbody2Dに力を加える
rb.AddForce(force);
簡単に解説すると、プレイヤーのRigidbody2Dコンポーネントが格納された変数『rb』にAddForce関数で力を加えています。
AddForce関数は引数で力を加える方向が決まります。
変数.AddForce(vector2型の変数)
今回はx軸に矢印キーの値を入れたので、矢印キーを押した方向に力が加わります。
ですので、矢印キーを押した方向に動くのです。
実行結果は、
![](https://mogi0506.com/wp-content/uploads/2019/03/名称未設定.mov-28.gif)
無事に動いていますね!
まとめ
この記事ではAddForceを使ったRigidbody2Dの移動についてやりました。
unityで2dゲームを作る場合、移動はよく使いますので、ぜひ覚えておいてください!