PCゲームと言えば、やっぱり十字キーで移動するイメージがありますよね。まずはそれっぽくするためにそれを実現させたいぞ!ということで前置きはそこそこにやってみましょう。
共通認識
プレイヤーが球の状態で転がって移動するときなどは滑らかに動かしたい、キューブ型のプレイヤーならカックカクでもOK~!みたいに、動作の付け方にもいろいろなパターンがありますが、まずそれらの共通認識として頭に入れておきたいのがこちら。
- 手前に動かしたい→back
- 奥に動かしたい→foward
- 上に動かしたい→up
- 下に動かしたい→down
ややこしいけれども、手前(back)と言えばこっちに近付いてくるイメージ。奥は逆に遠ざかる(foward)イメージ。上(up)と言うのはジャンプした時などに向かう真上のことで、下は穴に落っこちたりしたときの方向。後々方向を指示する必要が出て来るので、頭パーン!ってなりそうだけれども覚えておかないと…。
方向キーを押すと移動するプログラム
それでは早速、方向キーを押すとその方向に一歩分移動するプログラムを書いていきましょう。
public class プログラム名 : MonoBehaviour
{
void Start()
{
}
void Update()
{
if (Input.GetKeyDown(KeyCode.LeftArrow))//左方向キーで左に移動
{
transform.position = transform.position + Vector3.left;
}
if (Input.GetKeyDown(KeyCode.RightArrow))//右方向キーで右に移動
{
transform.position = transform.position + Vector3.right;
}
if (Input.GetKeyDown(KeyCode.UpArrow))//上方向キーで奥に移動
{
transform.position = transform.position + Vector3.forward;
}
if (Input.GetKeyDown(KeyCode.DownArrow))//下方向キーで手前に移動
{
transform.position = transform.position + Vector3.back;
}
}
}
if (Input.GetKeyDown(KeyCode.方向キー指定))// {}
まずこの指示文ですが、もし(if)このキーが押されたら~をします。という文章です。{}の中で、どうしたいかを具体的に指示します。
transform.positionのお仕事について
transform.position = transform.position + Vector3.left;
transform.positionというのが、そのオブジェクトの位置を把握するお仕事をこなしてくれます。
このtransform.positionはVector3型で、XYZの座標がfloat型にて保管されているのです。
Vector3型ってなんぞ?
Vector3型というのは、3つのfloat型の値をまとめて保持できる型のことで、主に位置ベクトルを表すのに使います(xyz)。Unity独自の型だそうです。まあつまり、座標情報を持つ小さなゴブリンみたいなものでしょう。よくよく調べると別に位置情報だけに使えるわけではなく、3つの要素を持たせたいときなどにも普通にVector3型は使えるっぽいです。便利だね~。
ちなみにfloat型などは小数点を格納する為にある型です。詳しくはまた別記事を参照してください。(近日更新予定)
transform.position.x → X座標を取り出すときの表現
transform.position.y → Y座標を取り出すときの表現
transform.position.z → Z座標を取り出すときの表現
1歩分移動させる
transform.position = transform.position + Vector3.left;
transform.position + Vector3.left;の部分の解説をすると、先ほどのtransform.positionで取得した位置情報に、さらにVector3.left;を足すことによって左方向に向かって先ほど取得した座標分の大きさをプラスしますよってことですね。つまりこんな感じ。
イメージ的には、ファミコン時代のギャラクシアンみたいな移動の仕方をします。