最近は、2Dでゲームを作ることが多かったので、そこで学んだことを記述していこうと思います。
今回は2Dゲーム制作第一弾ということで、2Dキャラクターを動かす方法を解説していきたいと思います。
準備
まずは、プレイヤーとなるオブジェクトを用意しましょう。
最初にやるのは、プレイヤーのビジュアルとなるものの用意です。
私は「Capsule」をプレイヤーのビジュアルにしました。
次に、「Player」という名前の空のオブジェクトを作り、その中にプレイヤーのビジュアルになるものを入れます。
空のオブジェクトの中にキャラクターのビジュアルを入れることで、アニメーションを作るときに楽になるので、キャラクターを作るときはこの手順で作ることをお勧めします。
次に、プレイヤーにCollider2DとRigidbody2Dを追加します。
プレイヤーの準備は以上です。
次は、適当にステージを作っておきます。
これで準備は完了です。
スクリプト
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class playerMovement : MonoBehaviour
{
[SerializeField] float speed;
void Update()
{
MovementHandler();
}
private void MovementHandler()
{
Vector3 inputVector = new Vector3(0,0,0);
if (Input.GetKey(KeyCode.D))
{
inputVector.x = 1;
}
if (Input.GetKey(KeyCode.A))
{
inputVector.x = -1;
}
inputVector = inputVector.normalized;
transform.position += inputVector * speed * Time.deltaTime;
}
}
このスクリプトの解説をします。
「inputVector」という変数にベクトルを格納し、その値によってキャラクターが動く向きが決まります。
Dボタンを押したら右に移動してほしいのでXベクトルに「1」
Aボタンを押したら左移動してほしいのでXベクトルに「-1」を入れています。
これらの値を「inputVector」に入れて、「inputVector」に「speed」と「Time.deltaTime」をかけてプレイヤーの移動を行っているということですね。
それでは、このスクリプトを「Player」にアタッチしましょう。
Speedという項目がありますので好きな値を入れてみましょう。
これで実行をすると
Aで左へ、Dで右にプレイヤーが動けるようになりました!
しかし、プレイヤーが進んでいる方向に向いていませんですね。
これを直していきましょう。
スクリプトをこのように更新しましょう。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class playerMovement : MonoBehaviour
{
[SerializeField] float speed;
int directionScale = 1; //←この行を追加
void Update()
{
MovementHandler();
}
private void MovementHandler()
{
Vector3 inputVector = new Vector3(0,0,0);
if (Input.GetKey(KeyCode.D))
{
inputVector.x = 1;
transform.localScale = new Vector2(directionScale,1); //←この行を追加
}
if (Input.GetKey(KeyCode.A))
{
inputVector.x = -1;
transform.localScale = new Vector2(-directionScale,1); //←この行を追加
}
inputVector = inputVector.normalized;
transform.position += inputVector * speed * Time.deltaTime;
}
}
これらの追加した行で、プレイヤーオブジェクトのローカルスケール(画像の大きさ)を変えています。
つまり、Aを押せば画像のスケールは「-1 (左向き)」になり、Dを押せば画像のスケールは「1 (右向き)」になります。
これで実行しますと
進んでいる方向にプレイヤーが向くようになりました!
まとめ
いかがだったでしょうか?
次回はジャンプを実装していこうと思います。