はじめに
2Dゲームのキャラクターを、キーボードの矢印キーを使って動かす方法について解説します。
2種類の移動方法
キャラクターを移動させるには、方法が2つあります。
- Transformの座標を直接動かす
- 物理エンジンを使用
2Dアクションゲームを想定して、障害物との当たり判定などの設定が簡単な、Unityの物理エンジンを使用した方法を紹介します。
ステージとキャラクターの配置
ゲームのステージとキャラクターを配置しましょう。
この記事では、こちらの無料アセットのデモシーンを使います。
Simple 2D Platformer Assets Pack
デモシーンを開くと、キャラクターとステージがゲーム画面に表示されています。
キャラクターの設定
動かすキャラクターには、Rigidbody 2Dコンポーネントをつけます。
意図しない回転を避けるため、Freeze Rotation > zのチェックを外しておきましょう。
ここにチェックを入れておかないと、キャラクターが転んじゃうよ!
当たり判定
キャラクターとステージには、コライダーをつけておきましょう。
コライダーで、オブジェクト同士の当たり判定の範囲を設定できます。
もしコライダーがステージに設定されていないと、プレイヤーがすり抜けてしまいます。
移動スクリプト
以下のスクリプトを作成してキャラクターにアタッチしましょう。
Rididbocyコンポーネントを取得し、左右の矢印キーを押した時に、動く方向や速さを指定します。
rigidbody2D.velocityを変えることで、キャラクターを動かします。
プレイヤーの動く速度:speedの値をインスペクターから変えることができます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MovePlayer : MonoBehaviour
{
public float speed = 3f;
private float playerSpeed;
Rigidbody2D rigidbody2D;
// Start is called before the first frame update
void Start()
{
rigidbody2D = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update()
{
// 左キーを押したら左方向へ進む
if (Input.GetKey(KeyCode.LeftArrow)) playerSpeed = -speed;
// 右キーを押したら右方向へ進む
else if (Input.GetKey(KeyCode.RightArrow)) playerSpeed = speed;
// 何もおさなかったら止まる
else playerSpeed = 0;
rigidbody2D.velocity = new Vector2(playerSpeed, rigidbody2D.velocity.y);
}
}
スタートすると、左右の矢印キーを押すとキャラクターが移動しました!
ジャンプはできないので、そのまま落ちてしまいます
おわりに
Unity物理エンジンを使用した、2Dキャラクターの移動方法について紹介しました。
キャラクターを動かす際は、当たり判定も忘れずに設定しましょう。
2Dアクションゲームを手軽に作れる人気のアセットはこちら。