本文へスキップ
BecomeCoder

C#実践コース · 第8章 Unity開発 · レッスン47

Transformと移動・入力

ローカル実施

導入

すべてのGameObjectはTransform(位置・回転・大きさ)を持ちます。これをUpdateの中で変えると「動き」になります。プレイヤーの入力(キー・スティック)と組み合わせて、操作できるキャラクターを作りましょう。

図解

flowchart LR
    INPUT["入力<br/>Input.GetAxis(&quot;Horizontal&quot;)"] --> CALC["移動量を計算<br/>速度 × Time.deltaTime"]
    CALC --> MOVE["transform.Translate(...)<br/>位置を更新"]

サンプル(Unity C# ― 読み物)

using UnityEngine;

public class Mover : MonoBehaviour
{
    public float speed = 5f;

    void Update()
    {
        // 矢印キー/WASD/スティックの左右入力(-1〜1)
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");

        // Time.deltaTime(前フレームからの経過秒)を掛けると、
        // フレームレートに関係なく一定速度で動く
        Vector3 move = new Vector3(h, v, 0) * speed * Time.deltaTime;

        // 自分の Transform を動かす
        transform.Translate(move);
    }
}
  • transformはそのGameObjectのTransformコンポーネント(位置positionなど)
  • Input.GetAxis("Horizontal")で左右入力(-1〜1)が取れる
  • Time.deltaTimeを掛けるのが鉄則:フレームレートが違っても同じ速度で動く
  • Vector3は3次元ベクトル(x, y, z)。2Dならzは0

Unityで試す

  • スプライトのGameObjectにMoverを貼り、再生して矢印キーで動くことを確認
  • speedをInspectorで変えて動きの速さが変わることを確かめる
  • Time.deltaTimeを外すと動きが速くなりすぎる(=フレームレート依存)ことを体感する

まとめ

  • transformで位置・回転・大きさを操作する
  • Input.GetAxisで入力を取る
  • 移動量には必ずTime.deltaTimeを掛ける(フレームレート非依存)

次回: 時間差の処理を書く——コルーチンです。