3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-01-28

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

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

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

rapture_20210126224830.jpg

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

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

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

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

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

rapture_20210127210908_New.jpg

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

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

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

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

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

動かすとこんな感じ。
enemty.gif

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

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へドラッグアンドドロップします。

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

enemty2.gif

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

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?