【Unity】プレイヤーを操作(コントロール)するスクリプトを作成(Rigidbodyを使用)

2021年2月23日Unity

スポンサーリンク

物理演算(Rigidbody)を考慮してプレイヤーを操作したい場合は、RigidbodyのAddForceを使用して、スクリプトを作成するので、その方法を紹介します。
※物理演算を気にする必要がない場合はTransformでスクリプトを作成する。

プレイヤーを作成

1.例としてCylinderオブジェクトをプレイヤーとして作成します。名前はCylinderPlayerにします。

プレイヤーを操作するスクリプトを作成

1.MoveRigidbody.csという名前のスクリプトを作成して、以下のコードを記載する。

using UnityEngine;

// アタッチしたGameObjectにRigidbodyがアタッチされていない場合、アタッチする
[RequireComponent(typeof(Rigidbody))]
public class MoveRigidbody : MonoBehaviour
{
    // 移動速度を設定(Inspectorタブからも値を変更できるようにする)
    [SerializeField]
    private float speed = 2.0f;

    // アタッチしているGameObjectのRigidbodyを格納する変数
    private Rigidbody rigidBody;

    // Start is called before the first frame update
    void Start()
    {
        // アタッチしているGameObjectのRigidbodyを取得
        //(FixedUpdate()内で毎回取得すると処理が重くなるので、Start()で取得する
        rigidBody = GetComponent<Rigidbody>();
    }

    //一秒間に一定の回数呼ばれる(物理演算(Rigidbody)を使った移動はFixedUpdateで行った方が良いらしい)
    private void FixedUpdate()
	{
        // 左右のキーの入力を取得
        float x = Input.GetAxis("Horizontal");
        // 上下のキーの入力を取得
        float z = Input.GetAxis("Vertical");

        // 上下左右キーを入力して得た値にspeedをかけた値をAddForceに設定して移動させる
        //(ForceMode.Impulseは瞬間的に力を加えるということ)
        rigidBody.AddForce(x * speed, 0, z * speed, ForceMode.Impulse);
    }

}

スクリプトを操作したいGameObjectにアタッチする

1.MoveRigidbody.csを操作したいGameObject(CylinderPlayerオブジェクト)にアタッチする。

2.CylinderPlayerにMoveRigidbodyとRigidbodyコンポーネントがアタッチされていることを確認
 ※RigidbodyはMoveRigidbody.cs内に"[RequireComponent(typeof(Rigidbody))]"を付けたことにより自動的に追加される

完成

これで上下左右キーを押すと、プレイヤーが操作できるようになった。

※このまま上下左右キーを押すと、CylinderPlayerオブジェクトの角度も一緒に動いてしまうので、角度は変えたくなければ、以下のようにRigidbodyの"Freeze Rotation"にチェックを付ける。

キーを押したときの動きが早すぎたり遅すぎたりする場合は以下のSpeedの値変えてみよう!

Speedを変える以外の方法としては、RigidbodyコンポーネントのMass(質量)を大きくすると、動きが遅くなる。

Unity

Posted by ton