Unityでの2Dジャンプアクションゲームの作成(敵キャラクター作成編)


前回の記事でplayerキャラを作成したので今回は敵キャラを作っていきます。

敵キャラとしてMask Dudeを採用するのでAssets/Pixel Adventure 1/Assets/Main Characters/Mask DudeよりIdleをすべて選択してHierarchyへドラッグアンドドロップします。

保存場所を聞かれるのでCharactersへ保存します、名前はEnemyAnimationとでもしておきます。

サイズが小さくなってると思うのでplayerと同じようにplayer per unitのサイズを32へ変更します。

ついでにHierarchyのEnemyのアニメーションの名前をIdle(32×32)からEnemyにでも変えておきます。

敵キャラは複数配置することを考えてプレハブ化していきます。
まずAssetsの下にprefabフォルダを作成します。

先ほど作ったEnemyに関してprefabへドラッグアンドドロップ

今後はPrefab内のEnemyの設定をいじっていくためHierarchyのEnemyを消去します。

敵キャラに当たり判定と移動を付け加えていきます。Prefab内のEnemyを選択してOpen Prefabをクリック。

当たり判定を付けるためにAdd ComponentからCircle Collider 2Dを選択して追加。そうすると円の当たり判定が追加されます。

今のままだと当たり判定がデカすぎるのでOffsetを編集して判定を少し小さくします。こんな感じ。

同じ手順Add ComponetでRigidbody 2Dを追加して物理演算の付与。ConstraintsのFreeze Rotation Zにチェックを入れて回転しないようにします。

終わったらPrefabからScene画面へドラッグアンドドロップでEnemyの追加を行います。

動かすとこんな感じ。

敵キャラの準備ができたので移動させるためにスクリプト書いていきます。

Playerの時と同じようにAssets/Scripts内にScriptを作成、名前はEnemyManagementにでもしておきます。
ScriptについてはPlayerのScriptから入力部分を削ったものを以下のように記述。


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

public class EnemyManagement : MonoBehaviour
{
    public LayerMask StageLayer;

    // 動作状態を定義する 
    private enum MOVE_TYPE
    {
        STOP,
        RIGHT,
        LEFT,
    }
    MOVE_TYPE move = MOVE_TYPE.LEFT; // 初期状態は左に移動 
    Rigidbody2D rbody2D;             // Rigidbody2Dを定義
    float speed;                     // 移動速度を格納する変数

    private void Start()
    {
        // Rigidbody2Dのコンポーネントを取得
        rbody2D = GetComponent<Rigidbody2D>();
    }

    // 物理演算(rigidbody)はFixedUpdateで処理する
    private void FixedUpdate()
    {
        // Playerの方向を決めるためにスケールの取り出し
        Vector3 scale = transform.localScale;
        if (move == MOVE_TYPE.STOP)
        {
            speed = 0;
        }
        else if (move == MOVE_TYPE.RIGHT)
        {
            scale.x = 1; // 右向き
            speed = 3;
        }
        else if (move == MOVE_TYPE.LEFT)
        {
            scale.x = -1; // 左向き
            speed = -3;
        }
        transform.localScale = scale; // scaleを代入
        // rigidbody2Dのvelocity(速度)へ取得したspeedを入れる。y方向は動かないのでそのままにする
        rbody2D.velocity = new Vector2(speed, rbody2D.velocity.y);
    }
}

Scriptを書き終わったらprefabフォルダ内のEnemyを選択してopen prefabを選択。そこで先ほどのEnemyManagementをEnemyへドラッグアンドドロップします。

反映されているのを確認したら再生。こんな感じになるはず。

敵キャラの実装と移動が可能になりました。
次回は敵キャラの落下回避や当たり判定作っていきます。