【UNITY 逆引き備忘録】キャラクターを動かす(Rigitbody.velocity)


はじめに

本記事では、Unityでキャラクターを動かすまでの手順を備忘録として残す。
移動方法はいくつかあるが、今回はRigitbodyのvelocityを利用する。
手順通りに進めると、以下のようなものができあがる。

↑:前進
↓:後退
←:左回転
→:右回転
カメラがキャラクターを追従

Rigitbody.velocityによる移動

Rigitbodyのvelocity(速度)を直接書き換えることで移動する

メリット

物理演算が適用される
一定の速度で移動するので扱いやすい
単調なゲームに向いている

デメリット

質量や重力を考慮していないので挙動が非現実的
リアルな動作を追求したい場合は向かない

手順

0.前準備

Cube等で床を作り、ColliderをAdd Componentする
(Cube等をCreateした場合、Colliderはデフォルトでセットされている)

1.キャラクターを設置

キャラクターを用意する(めんどくさければとりあえずCubeでもOK)
メインカメラで見える位置に設置する

2.RigitBodyを追加

キャラクターにRigitBodyをAdd Compornentする
Use Gravity  ☑
Is Kinematic ☐
※再生してキャラクターが床をすり抜けて落ちれば成功

3.Colliderを追加

キャラクターにColliderをAdd Compornentする
キャラクターと同じくらいの大きさを設定する
Is Trigger  ☐
※再生してキャラクターが床をすり抜けなくなれば成功

4.スクリプトを追加

キャラクターに下記スクリプトをAdd Compornentする
InspectorからspeedとrotateSpeedを設定する
※再生してキャラクターを操作できれば成功

    public float speed;
    public float rotateSpeed;

    private Transform tr;
    private Rigidbody rb;
    private Vector3 charactorForward;
    private Vector3 moveVector;
    private float vertical;
    private float horizontal;

    void Start()
    {
        tr = this.transform;
        rb = GetComponent<Rigidbody>();
    }

    private void FixedUpdate()
    {
     //上下の入力
        vertical = Input.GetAxis("Vertical");
     //左右の入力
        horizontal = Input.GetAxis("Horizontal");
     
        //回転
        if (horizontal > 0)
            transform.Rotate(0, rotateSpeed * Time.fixedDeltaTime, 0);
        if (horizontal < 0)
            transform.Rotate(0, (-1) * rotateSpeed * Time.fixedDeltaTime, 0);

        //移動ベクトル
        moveVector = tr.forward * vertical * Time.fixedDeltaTime * speed; 
        //移動
        rb.velocity = new Vector3(moveVector.x, rb.velocity.y, moveVector.z);
    }
5.カメラを追従させる

メインカメラをキャラクターの子オブジェクトにする
※再生してカメラが3人称視点になっていれば成功