Unity|パックマン風ゲームを作成。Part1.プレイヤーの移動を作成

「簡単なパックマン風のゲーム」をUnityで作成してみます。

完全なパックマンを作るのではなく、チュートリアルのような感じで、初めてUnityでゲームを作る人でも出来るミニゲーム的な内容です。

はじめに

今回作成するのは「プレイヤーが決められた範囲内を動く」、「敵をよけて、落ちているアイテムを回収」するものです。簡単に言うとパックマン的なゲームです。

練習的なミニゲームを想定して作成していくので、音や開始画面、クリア画面、オプションなどは作成予定無しです。基本的なゲーム部分を作成していきます。

Unityのバージョン

今回は「Unity 2022.3.14f1」バージョンで作成していきます。OSはWindows11です。

UnityHubを起動したら「新しいプロジェクト」を選択。テンプレートは「2D」を選択して、プロジェクト名は「PacmanLike」としています。

作成開始

Part1ではプレイヤーを作成していきます。

プレイヤーの作成

プレイヤーとして下記の画像を利用していきます。

画像を3枚(16×16のサイズ)に分割。Assetsフォルダ内にSpritesフォルダを作成して、Unityに取り込みます(Unity側で画像を分割してもOK)。

Unityで画像を分割する方法は下記が参考になります。

画像を3つとも選択して、Inspector画面で下記のようにドット絵の設定をします。

「Hierarchy」で「CreateEmpty」を選択し空オブジェクトを追加します。

名前をPlayerにして、「SpriteRenderer」をアタッチ。Spriteにプレイヤーの画像をセットします。

「Rigidbody2D」もアタッチして、重力で下に落ちないように設定します。

プレイヤースクリプトの作成

Assetsフォルダ内にScriptsフォルダを作成、その中にPlayerスクリプトを作成します。

Plyaerスクリプトの中身は下記に変更します。キーボードの上下左右、WASDを入力すると、入力した方向にプレイヤーが動きます。direction変数に方向を保持することで、次の入力があるまで同じ方向に動き続けます。

using UnityEngine;

public class Player : MonoBehaviour
{
    private Rigidbody2D rb;
    private float speed = 8.0f;
    private Vector2 direction;

    private void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    private void Update()
    {
        if (Input.GetAxisRaw("Horizontal") != 0|| Input.GetAxisRaw("Vertical") != 0)
        {
            direction.x = Input.GetAxisRaw("Horizontal");
            direction.y = Input.GetAxisRaw("Vertical");
        }
    }

    private void FixedUpdate()
    {
        Vector2 dist = direction * speed * Time.fixedDeltaTime;
        rb.MovePosition(rb.position + dist);
    }
}

実行してキー入力すると下記のような感じに動きます。「→」を一度押すと、右に進み続けます。

アニメーションの追加

次にプレイヤーにアニメーションを加えていきます。

上のメニューバーの「Window」→「Animation」→「Animation」を選択します。

HierarchyからPlayerを選択してAnimationウィンドウの「Create」を選択します。保存先を聞かれるので、Aseetsフォルダ内にAnimationフォルダを作成して指定しておきます。

Animationは下記のような順番で画像を指定します。いい感じに動いているかは再生ボタンを押して確認していきます。

アニメーションの作成方法は下記が参考になります。

PlayerスクリプトのStart内に初期の移動方向を追加し、Update内にプレイヤーの回転を追加します。下記は追加部分だけを抜粋してあります。

    private void Start()
    {
        direction = Vector2.right;
    }

    private void Update()
    {
        float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
        transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
    }

試しに実行してみると下記のように動きます。

これでプレイヤーの動きがひとまず完成です。

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