遊テックプログラミング教室

プログラミングノートNOTE

キー入力でプレイヤーを移動

概要

Unityでキー入力によってプレイヤーを前後左右に移動させるスクリプトです。

上下左右の矢印キーまたはWASDキーの押下でこのスクリプトをアタッチしたゲームオブジェクトが前後左右に移動します。

変数speedの値で移動速度を設定します。

コード

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

public class PlayerController : MonoBehaviour
{
    float speed = 10.0f;

    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        float x = Input.GetAxis("Horizontal");//X軸方向の入力
        float z = Input.GetAxis("Vertical");//Z軸方向の入力
        transform.Translate(x * Time.deltaTime * speed, 0, z * Time.deltaTime * speed);//移動
    }
}

解説

★Time.deltaTimeについて

Update関数は、FixedUpdate関数と異なり、呼ばれる間隔が一定ではありません。

そのため、特にそれを意識せずに移動のスクリプトを書くと、移動の速さが一定ではなくなってしまいます。

そこで、使われるのがTime.deltaTimeです。Time.deltaTimeは、前のフレームからの経過時間(秒)を表します。

1フレーム当たりの移動量にTime.deltaTimeを掛け合わせることで、フレーム間の時間が変動してもキャラの移動の速さを一定に保つことが出来るのです。

何やら難しいですが、、Updateを使って移動する時には、Time.deltaTimeを掛ければ良いと覚えておきましょう。

 

★Input.GetAxisとInput.GetAxisRawの違い

Input.GetAxisは動き出しがゆっくりになるように補正がかかっています。この補正を無くしたい時は、Input.GetAxisの代わりに、Input.GetAxisRawを使いましょう。