今回はUnity 2Dでキャラクターをキーボードを使用し、上下左右に移動させてみます。
それと、右と左を押した時には、キャラクターの画像を反転させて押した方向を向くようにします。
検証に使用しているUnityのバージョンは’2021.1.19f’で、言語はC#を使っています。
Unity 2Dでキャラクターを上下左右に移動する
今回はハリセンボンをキャラクターとして配置して、下記のようにキーボードの十字キーで上下左右に移動するようにします。
左を押したら左、右を押した時には右を向くようにして、画像反転の制御も入れます。
作成するまでの手順は下記になります。
2. キャラクターに対して、スクリプトを追加する
3. キャラクターのスクリプトを編集する
それでは、実際に実装する手順を確認していきましょう。
キャラクターを上下左右に移動するまで
キャラクターの配置や重ね順については、下記に記事を書いたので、確認してみてください。
今回はシーンに対して、背景画像をひとつと動かすキャラクターをひとつ追加しました。
下記のような状態です。
その後にキャラクターに対して、スクリプトを追加します。
画面右のInspector
からAdd Component
をクリックして、New Script
を選択します。
そうすると、スクリプトの名前を入力できる状態になるので、スクリプト名を入力します。
今回はMoveCharactorController
というスクリプト名にしてみました。
スクリプトの内容は下記になります。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveCharactorController : MonoBehaviour
{
private float speed = 0.05f;
void Start()
{
}
void Update()
{
Vector2 position = transform.position;
if (Input.GetKey("left"))
{
position.x -= speed;
}
else if (Input.GetKey("right"))
{
position.x += speed;
}
else if (Input.GetKey("up"))
{
position.y += speed;
}
else if (Input.GetKey("down"))
{
position.y -= speed;
}
transform.position = position;
}
}
スクリプトの内容を解説します。
Update
メソッドの中に修正を加えています。
このメソッドは、ゲーム実行中に毎フレーム処理されるメソッドになります。
キーボードの入力などを瞬時に検知して処理することが可能です。
コードの中では最初に、下記のようにして、このスクリプトを紐付けたオブジェクト(ハリセンボン)の位置を取得しています。
取得した位置はposition
変数に保持します。
Vector2 position = transform.position;
その後に、キーボード入力を検知して処理しています。
それぞれif
文で判定していますが、下記の意味になります。
・`Input.GetKey(“right”)`で右の矢印が押された
・`Input.GetKey(“up”)`で上の矢印が押された
・`Input.GetKey(“down”)`で下の矢印が押された
それぞれのif
文がtrue
になる場合に処理を行います。
左が押されたら、現在の位置から下記のようにして、横軸位置(x
)をspeed
変数から引いてposition
変数の内容を変更しています。
position.x -= speed;
speed
変数には0.05f
をスクリプトの最初にいれて定義していました。
同じようにして右が押された場合には、現在の位置から、横軸位置(x
)を足しています。
position.x += speed;
上矢印を押された場合には、縦軸位置(y
)を足します。
position.y += speed;
同様に下矢印を押された場合には、縦軸位置(y
)を引くといった形です。
position.y -= speed;
最後にオブジェクトのtransform.position
に変更を加えたposition
変数を設定することで、オブジェクトの位置を変えています。
transform.position = position;
`transform.position.x -= speed;`
上下移動の動作確認をする
この状態で、動作確認をすると下記のようになります。
キャラクターの向きが変わらないまま、左右をチョロチョロ動いていますね。
特に反転させる処理をしていないので、こうなってしまいました。
次に右を押したら右を向いて、左を押したら左を向くようにキャラクター画像を反転してみます。
矢印の方向にキャラクター画像を反転させる
キャラクター画像を反転させるには、Sprite Renderer
のFlip
項目に対して、true
を入力してあげるとOKです。
実際のスクリプトは下記のように修正しました。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveCharactorController : MonoBehaviour
{
private float speed = 0.05f;
//---ここから追加----
private SpriteRenderer renderer;
//---ここまで追加----
void Start()
{
//---ここから追加----
renderer = GetComponent<SpriteRenderer>();
//---ここまで追加----
}
void Update()
{
Vector2 position = transform.position;
if (Input.GetKey("left"))
{
position.x -= speed;
//---ここから追加----
renderer.flipX = false;
//---ここまで追加----
}
else if (Input.GetKey("right"))
{
position.x += speed;
//---ここから追加----
renderer.flipX = true;
//---ここまで追加----
}
else if (Input.GetKey("up"))
{
position.y += speed;
}
else if (Input.GetKey("down"))
{
position.y -= speed;
}
transform.position = position;
}
}
追加したところだけ、解説します。
最初にSpriteRenderer
の変数を定義しています。
その後に、Start
メソッドで、スクリプトを紐づけたオブジェクトのSpriteRenderer
を取得しています。
renderer = GetComponent<SpriteRenderer>();
SpriteRenderer
を取得できたら、あとは簡単です。
今回使用した画像はもともと左を向いているので、左を押している間はfalse
を設定しています。
if (Input.GetKey("left"))
{
position.x -= speed;
renderer.flipX = false;
}
逆に右を押している間はtrue
を設定するといった形です。
else if (Input.GetKey("right"))
{
position.x += speed;
renderer.flipX = true;
}
以上で、設定完了です。
反転するか動作確認する
実際に動作確認をすると、下記のように動いた方向にキャラクターが向くことが確認できます。
コメント
さいこう!!
ありがとうございます😃