導入
すべてのGameObjectはTransform(位置・回転・大きさ)を持ちます。これをUpdateの中で変えると「動き」になります。プレイヤーの入力(キー・スティック)と組み合わせて、操作できるキャラクターを作りましょう。
図解
flowchart LR
INPUT["入力<br/>Input.GetAxis("Horizontal")"] --> 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を掛ける(フレームレート非依存)
次回: 時間差の処理を書く——コルーチンです。