2Dゲームでマス目に沿って1マスずつ移動する方法【Unityゲーム制作】

今回はUnityで「1マスずつ移動する方法」の実装メモです。

キー入力で、あらかじめ決められた距離(1マス)を移動する感じです。一昔前のトップダウン式の2DRPG・シミュレーション系のゲームはほぼこのような動きをしますね。

はじめに

Unityのインストール方法・日本語化は下記から。

Unityのヴァージョン

今回使用するのは「Unity 2020.3.21f1」ヴァージョン。2Dで作成していきます。

プロジェクト名を適当に入力して「作成」

作成開始

さっそく作成していきます。アセットストアから色々持ってきた方が早く作成できますが、今回はゼロベースで動きを理解しながら実装していきます。

事前準備

まずはマス目となる画像を適当にペイントで作成。

サイズは32px×32px。背景をねずみ色にして、適当に枠線を引いた感じです。無しでも良いですが、あった方が動きの確認がしやすいです。

この画像をImagesフォルダを作成して入れておきます。

床の作成

空のオブジェクトを作成、名前をGroundsにします。

配下にgroundの空のオブジェクトを追加、コンポーネントを追加から、「スプライトレンダラー」を追加。

スプライトに作成したground画像をセットして、プレハブ化しておきます。

プレハブを複製して、縦と横に適当に並べます。

一旦、下記の様な感じに5個並べます。

タイルを使って全体にセットする方法もありますが、今回は「移動」を軸に置いてるのでマス移動が分かる感じでOK。

プレイヤーの作成

次にプレイヤー(動かすもの)をセット。2Dオブジェクトから「スプライト」の「円」を追加。

名前をPlayerにして、色は分かりやすく赤色にしておきます。

PlayerMoveと言う名前でスクリプトを作成して、Playerにくっつけます。

スクリプトの中身は下記に変更。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMove : MonoBehaviour
{
    [SerializeField] private float speed;

    private float distance;
    private Vector2 move;
    private Vector3 targetPos;

    private void Start()
    {
        distance = 1.6f;
        targetPos = transform.position;
    }
    void Update()
    {
        move.x = Input.GetAxisRaw("Horizontal");
        move.y = Input.GetAxisRaw("Vertical");

//        if (move != Vector2.zero && Vector3.Distance(transform.position, targetPos) < 0.5f)
        if (move != Vector2.zero && transform.position == targetPos)
        {
            targetPos += new Vector3(move.x * distance, move.y * distance, 0);
        }
        Move(targetPos);
    }

    private void Move(Vector3 targetPosition)
    {
        transform.position = Vector3.MoveTowards(transform.position, targetPosition, speed * Time.deltaTime);
    }
}

簡単に説明すると、distanceはマスの間隔。1マスが大きい場合はこの数値が大きくなり、小さい場合は小さくなります。

targetPosは移動先となる位置をセットする変数です。初期はオブジェクトの位置、キー操作で位置情報を変更します。

Input.GetAxisRaw(“Horizontal”)、Input.GetAxisRaw(“Vertical”)は上下左右が入力されたときに±1がセットされます。

Vector3.MoveTowardsで移動元、移動先、移動速度をセットすると、セットした移動速度で移動していきます。

試しに動かしてみて1マスづつ動けばOK。

コメント部分は下の行と入れ替えると、先行入力を受け付ける感じに。

タイトルとURLをコピーしました