【Unity】RigidBodyを使用した移動スクリプトの作成

Unity

最近はUnityでゲームを作ることにハマっています。

ゲームを作るとなるとまずはゲームの基本となる移動スクリプトの作成をからですよね。

そこで詰まっている方もいるかもしれないので今回は移動スクリプトの作成をしたいと思います。

C#スクリプトの作成

まずはC#スクリプトの作成からしたいと思います。

ちなみに今回は3Dで作成するのでプロジェクトは3Dで作成しておいてください。

ではプロジェクトの欄で右クリックしてください。

そしたら作成タブをクリックし中にあるC#スクリプトをクリックしてください。

スクリプト名はPlayerMoveに変更してください。

これでC#スクリプトの作成は完了です。

移動プログラム書き込み

次に先ほどのPlayerMoveを開いてください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMove : MonoBehaviour
{
    //rbという変数にRigidbodyを与える
    private Rigidbody rb;

    //移動スピード 初期値6
    public float moveSpeed = 6f;

    // Start is called before the first frame update
    void Start()
    {
        //rbという変数にRigidbodyコンポーネントを取得する
        rb = GetComponent<Rigidbody>();
    }

    // Update is called once per frame
    void Update()
    {
        //x変数に左右のキーを押したらを与える
        float x = Input.GetAxisRaw("Horizontal") * moveSpeed;
        //y変数に前後のキーを押したらを与える
        float y = Input.GetAxisRaw("Vertical") * moveSpeed;

        //縦のスピードと横のスピードをmovePosに与える
        Vector3 movePos = transform.right * x + transform.forward * y;

        //newMovePosに縦横のmovePosを与える
        Vector3 newMovePos = new Vector3(movePos.x, rb.velocity.y, movePos.z);

        //物理演算を利用しない移動
        rb.velocity = newMovePos;
    }
}

そしたら説明は後からするのでとりあえずはこちらの移動プログラムをコピペしてみてください。

これでとりあえずWASDで動かすことが出来ると思います。

移動スクリプトの詳細

Rigidbody

//"rb"という変数に"Rigidbody"を与える
private Rigidbody rb;

まずはこちらですが説明文に書いてある通り”rb”という変数にRigidbodyを与えています。

こちらを付けるとこのC#スクリプトを付けたオブジェクトには必ずRigidbodyを付ける必要があります。

moveSpeed

//移動スピード 初期値6
public float moveSpeed = 6f;

移動スピードを設定します。

しかしこれだけではmoveSpeedという変数に6という数字を与えているだけで何も起こりません。

GetComponent<Rigidbody>

//rbという変数にRigidbodyコンポーネントを取得する
rb = GetComponent&amp;amp;amp;lt;Rigidbody&amp;amp;amp;gt;();

rbという変数にRigidbodyコンポーネントを取得させます。

こちらをやる意味はまだイマイチ分かってませんがこれが無いと一番最初のRigidbodyが機能しません。

float x

//x変数に(-1左旋回,+1右旋回)のキーを押したらを与える
float x = Input.GetAxisRaw("Horizontal") * moveSpeed;

左旋回キーを押されたら-1という数字に変換します。そして右旋回キーが押されたら+1という数字に変換します。

先程の数字(-1,+1)をmoveSpeed(先ほど決めた6)を掛けます。

つまり左キーが押されたらfloat xに-6を与え、右キーが押されたらfloat xに+6を与えます。

float y

//y変数に(+1前進,-1後退)のキーを押したらを与える
float y = Input.GetAxisRaw("Vertical") * moveSpeed;

前進キーが押されたら+1という数字に変換します。そして後退キーが押されたら-1という数字に変換します。

先程の数字(+1,-1)をmoveSpeed(先ほど決めた6)に掛けます。

つまり前進キーが押されたらfloat yに+6を与え、後退キーが押されたらfloat yに-6を与えます。

movePos

//縦のスピードと横のスピードをmovePosに与える
Vector3 movePos = transform.right * x + transform.forward * y;

transform.rightとfloat xを掛けます。つまりtransform.rightには1という数字が代入されています。

なのでtransform.right(1) * float x(+6,-6) = +6,-6になります。

transform.forwardにも同じく1という数字が代入されています。

なのでtransform.forward(1) * float y(+6,-6) = +6,-6になります。

これら二つを合わせると+6,-6 + +6,-6 = +12,-12になります。

結果的にmovePosには+12か-12の数字が入ります。

newMovePos

//newMovePosに縦横のmovePosを与える
Vector3 newMovePos = new Vector3(movePos.x, rb.velocity.y, movePos.z);

movePos.xとはmovePosの結果数字をxに代入してます。

rb.velocityはこの後出てくるのですがnewMovePosの結果を代入してます。

movePos.zにはmovePosの結果数字をzに代入しています。

rb.velocity

//物理演算を利用しない移動
rb.velocity = newMovePos;

rb.velocityにnewMovePosの結果を代入してます。

先程のrb.velocity.yに使うためだけに存在します。

キャラクターを動かしてみよう

先程のスクリプトを利用してキャラを作り動かしてみよう!

床作成

まずヒエラルキーを右クリックしてください。

次に3Dオブジェクトの中にある平面をクリックしてください。

そしてtransformをクリックして右クリックを押してその中にあるリセットをクリックしてください。

これで床が完成しました。

キャラ作成

まずはヒエラルキーを右クリックしてください。

次に3Dオブジェクトの中にあるカプセルをクリックしてください。

そしてtransformをクリックして右クリックを押してその中にあるリセットをクリックしてください。

そしたらY位置の高さを1.5に設定してください。

次にコンポーネント追加からRigidbodyを追加してください。

さらにRigidbodyの中にあるConstraintsのXとZの回転を固定してください。

最後にPlayerMoveを追加してください。

これでキャラが完成しました。

まとめ

正直分かりずらかったと思うのですがとりあえず最初に書いたコードをコピーして動かしたいオブジェクトに追加してあげれば動きます。

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