【unity入門】AddForceを使ったRigidbodyの移動
アクションゲームを作成するには移動が不可欠ですよね。
unityでオブジェクトを移動させる簡単な方法は、Rigidbodyコンポーネントをオブジェクトに追加し、AddForce関数を使って動かすという方法です。
この記事ではAddForce関数を使ってオブジェクトを動かす方法について解説します。
この記事の目次
今回作るもの
パソコンの方向キーで玉を操作して、地面の上を動かしていこうと思います。
やること
具体的にやることは、
1.Rigidbodyコンポーネントをオブジェクトに追加
2.AddForce関数を使ったコードの記述
それでは早速始めていきましょう!
Rigidbodyコンポーネントをオブジェクトに追加
Rigidbodyコンポーネントをオブジェクトに追加していきましょう。
まずはボールと地面二つのオブジェクトを作成します。
地面の作成
HierarchyビューからCreate>3D Object>Cubeでオブジェクトを作ります。
今回は地面を作りたいので、オブジェクトを平らにします。
オブジェクトを選択した状態で、Scaleのxとzを10にしてください。
これで地面が完成しました。
玉の作成
次は玉を作成していきます。
HierarchyビューからCreate>3D Object>Sphereを選択して作成します。
これで玉ができました。
Rigidbodyを追加
今回はAddForce関数を使ってボールに追加されたRigidbodyコンポーネントに力を加えることで移動させます。
しかし、オブジェクトは作成した状態だとRigidbodyコンポーネントが追加されていません。
ですので、次はRigidbodyコンポーネントを玉オブジェクトに追加していきます。
追加の仕方は、sphereオブジェクトを選択した状態で
InspectorからAddComponent>Physics>Rigidbodyを選択することで追加されます。
Sphereオブジェクトを確認してみると、Rigidbodyが追加されていますね。
AddForce関数を使ったコードの記述
スクリプトの作成
玉を動かすコードを記述するためのスクリプトを作成します。
HierarchyビューからCreate>C#Scriptを選択することで作成できます。
スクリプトの追加
スクリプトを作成したらオブジェクトにコンポーネントとして追加しましょう。
今回は玉を動かしたいので玉にスクリプトを追加します。
追加の仕方は、スクリプトをSphereオブジェクトにドラッグ&ドロップです。
これでスクリプトがコンポーネントとして追加されました。
方向キーの入力を受け取る
今回は方向キーが押された方向に力を加えて玉を動かします。
ですので、まずは方向キーがどの方向に押されたのか判断するためのコードを記述します。
コード内容は、
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
//一秒間に一定の回数呼ばれる
void FixedUpdate()
{
// 入力をxとzに代入
float x = Input.GetAxis("Horizontal");
float z = Input.GetAxis("Vertical");
}
}
簡単に解説すると、FixedUpdate関数は{ }の中に書いた記述が一秒間に一定の回数呼ばれます。
FixedUpdate関数の中に記述された
// 入力をxとzに代入
float x = Input.GetAxis("Horizontal");
float z = Input.GetAxis("Vertical");
は
Input.GetAxis("Horizontal")
が水平方向、つまり矢印キーの左右の入力を-1から1までの小数で返します。
左のキーを押している間は-1に段々と近づいていき、ずっと押していると-1に至ります。
反対に右のキーを押している間は1に段々と近づいていき、ずっと押していると1に至ります。
そしてその-1から1までの値を変数『x』に格納します。
float z = Input.GetAxis("Vertical");
もほとんど同じで垂直方向、つまり矢印キーの上下に対応してます。
Rigidbodyを取得
今回は玉オブジェクトに追加されたRigidbodyコンポーネントに力を加えることで移動させるのでした。
ですので、コードの中でRigidbodyに力を加えられるように玉オブジェクトに追加されたRigidbodyコンポーネントを取得しましょう。
Rigidbodyコンポーネントを取得するコードは、
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
//一秒間に一定の回数呼ばれる
void FixedUpdate()
{
// 入力をxとzに代入
float x = Input.GetAxis("Horizontal");
float z = Input.GetAxis("Vertical");
//Rigidbodyを取得
Rigidbody rb = GetComponent<Rigidbody>();
}
}
今回追加されたのは、
//Rigidbodyを取得
Rigidbody rb = GetComponent<Rigidbody>();
ですね。
簡単に説明をすると、GetComponent()という関数はスクリプトが付いているオブジェクトのcomponentを取得します。
GetComponentの後ろにある『<>』はcomponentの種類を表しています。
ですので、GetComponent<Rigidbody>()はRigidbodyの取得という意味です。
今回は、
Rigidbody rb = GetComponent<Rigidbody>();
ですので、Rigidbodyを取得してRigidbody型の変数『rb』に格納しています。
変数『rb』は適当に決めたものですので、わかりやすければなんでも構いません。
AddForceで力を加える
それではAddForce関数を使ってRigidbodyに力を加える記述をしていきます。
記述内容は、
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
//一秒間に一定の回数呼ばれる
void FixedUpdate()
{
// 入力をxとzに代入
float x = Input.GetAxis("Horizontal");
float z = Input.GetAxis("Vertical");
//Rigidbodyを取得
Rigidbody rb = GetComponent<Rigidbody>();
//Rigidbodyに力を加える
rb.AddForce(x, 0, z);
}
}
今回追加された部分は
//Rigidbodyに力を加える
rb.AddForce(x, 0, z);
簡単に解説すると、玉オブジェクトのRigidbodyコンポーネントが格納された変数『rb』にAddForce関数で力を加えています。
AddForce関数は引数で力を加える方向が決まります。
変数.AddForce(x軸,y軸,z軸)
今回はx軸とz軸に矢印キーの値を入れたので、矢印キーを押した方向に力が加わります。
ですので、矢印キーを押した方向に動くのです。
実行結果は、
無事に動いていますね!
まとめ
この記事ではAddForceを使ったRigidbodyの移動についてやりました。
unityで3dゲームを作る場合、移動はよく使いますので、ぜひ覚えておいてください!