2Dゲーム制作

【初心者向け】Unityで2Dの敵キャラを実装しよう|動きと接触判定の基本

はじめに

これまでの記事では、キャラクターの左右移動やジャンプ機能を実装してきました。今回は次のステップとして「敵キャラの配置と動き、そしてプレイヤーとの接触判定」を実装していきます。


1. 敵キャラ用スプライトを用意

  • 敵の見た目として使用する画像(例:モンスター、スライムなど)を用意
  • Unityの「Assets」フォルダにインポート
  • インポートしたスプライトを「ヒエラルキー」にドラッグしてシーンに配置
  • 名前を「Enemy」に変更

2. 敵キャラにコンポーネントを追加

  • Box Collider 2D:当たり判定のために追加
  • Rigidbody2D:動きや重力に反応させる(ボディタイプを”キネマティック”に設定)
    • キネマティックにすることで、物理的に反応させずにスクリプトで制御が可能になります

3. 敵の移動スクリプトを作成

EnemyController.cs というスクリプトを作成し、以下のコードを記述します:

using UnityEngine;

public class EnemyController : MonoBehaviour
{
    public float moveSpeed = 2f;
    public float moveRange = 3f;
    private Vector3 startPosition;
    private int direction = 1;

    void Start()
    {
        startPosition = transform.position;
    }

    void Update()
    {
        transform.Translate(Vector2.right * moveSpeed * direction * Time.deltaTime);

        if (Mathf.Abs(transform.position.x - startPosition.x) > moveRange)
        {
            direction *= -1; // 向きを反転
        }
    }
}
  • このスクリプトは、敵キャラが一定の範囲内で左右に移動する簡単なパターンを実現します
  • スクリプトを「Enemy」に追加

4. プレイヤーとの接触判定

PlayerController にある OnCollisionEnter2D 関数を以下のように書き換えます:

void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.gameObject.CompareTag("Ground"))
    {
        isGrounded = true;
    }
    else if (collision.gameObject.CompareTag("Enemy"))
    {
        Debug.Log("敵に当たった!");
        // ダメージ処理やリトライ処理などをここに追加
    }
}
  • Enemyオブジェクトの「Tag」を「Enemy」に設定するのを忘れずに!
    ※タグの追加はタグ → タグを追加をクリックし、+ボタンをクリック
    Enemyと入力したらSaveをクリック

5. 実行して確認しよう

  • 敵が左右に動いているか
  • プレイヤーと接触したときにログが出るか

6. まとめ

これで2Dゲームに敵キャラを追加できました! 今後は、ダメージ処理や敵のパターン追加、倒せる仕組みなどを実装することで、ゲームらしさがどんどん増していきます。