見出し画像

敵AIを次のレベルへ!究極の攻撃プログラムテクニック公開!

❏ はじめに ❏

閲覧ありがとうございます。はじめまして、ゲーム開発所RYURYUの"りゅうや"と申します。

❏ ゲーム開発ランキング【 1位 】実績多数
❏ ココナラ総販売【 200件達成 】
❏ GC甲子園2022・東京ゲームショウ2023など出展経験あり

【ゲーム開発所RYURYUとは】
Unityを駆使した先進的な「ゲーム・VR・メタバース開発」や「オンライン教育サービス」を展開するゲームスタジオです。


はじめに

こんにちは、Unityゲーム開発者の皆さん!前回の「敵AI開発入門 #1」では基本的な敵AIの動きを実装する方法について学びました。

今回は、その敵AIに攻撃の能力を追加し、ゲームに更なる深みと興奮をもたらす方法をご紹介します。

プレイヤーに挑戦する、スマートな敵キャラクターを作成しましょう!

敵AIの攻撃はゲームの難易度や興奮度を大きく左右します。

ただ動き回るだけの敵ではなく、プレイヤーにダメージを与える敵はゲームプレイに緊張感をもたらし、プレイヤーを引き込む要素となります。

1.敵AIの視野を実装する

まず、敵AIがプレイヤーを認識できるように、視野を実装します。敵の視野内にプレイヤーが入った場合、敵は攻撃を開始します。

using UnityEngine;

public class EnemySight : MonoBehaviour
{
    public float fieldOfViewAngle = 110f;
    public bool playerInSight;
    public Vector3 lastPlayerSighting;

    private GameObject player;
    private Vector3 previousSighting;

    void Awake()
    {
        player = GameObject.FindGameObjectWithTag("Player");
    }

    void Update()
    {
        Vector3 direction = player.transform.position - transform.position;
        float angle = Vector3.Angle(direction, transform.forward);

        if (angle < fieldOfViewAngle * 0.5f)
        {
            RaycastHit hit;

            if (Physics.Raycast(transform.position, direction.normalized, out hit))
            {
                if (hit.collider.gameObject == player)
                {
                    playerInSight = true;
                    lastPlayerSighting = player.transform.position;
                }
            }
        }
    }
}


2.スクリプトを敵オブジェクトにアタッチする

次に、先程作成したスクリプトをUnityエディタ内で敵オブジェクトにアタッチする方法を説明します。

  1. Unityエディタを開いて、Hierarchyウィンドウで敵オブジェクトを選択します。

  2. 作成したスクリプト(EnemySight.cs)をAssetsから敵オブジェクトにドラッグ&ドロップします。

これで、敵オブジェクトはスクリプトの制御下にあります。


3.攻撃プログラムを追加する

次に、敵がプレイヤーに攻撃する機能を実装します。このステップでは、敵がプレイヤーに近づいた時に攻撃するロジックを追加します。

using UnityEngine;

public class EnemyAttack : MonoBehaviour
{
    public float timeBetweenAttacks = 0.5f;
    public int attackDamage = 10;

    private GameObject player;
    private bool playerInRange;
    private float timer;

    void Awake()
    {
        player = GameObject.FindGameObjectWithTag("Player");
    }

    void Update()
    {
        timer += Time.deltaTime;

        if (timer >= timeBetweenAttacks && playerInRange)
        {
            Attack();
        }
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject == player)
        {
            playerInRange = true;
        }
    }

    void OnTriggerExit(Collider other)
    {
        if (other.gameObject == player)
        {
            playerInRange = false;
        }
    }

    void Attack()
    {
        timer = 0f;

        // Insert player health deduction logic here
        // Example: playerHealth.TakeDamage(attackDamage);
    }
}


4.インスペクターで敵のパラメータを設定する

次に、敵のパラメータを調整します。これはInspectorウィンドウで行います。

  1. 敵オブジェクトを再びHierarchyウィンドウで選択します。

  2. Inspectorウィンドウで、EnemySightスクリプトとEnemyAttackスクリプトの各パラメータ(例:fieldOfViewAngle, timeBetweenAttacks)を設定します。

これで、敵オブジェクトの挙動がスクリプトに従って制御され、設定したパラメータに基づいて動作します。


5.敵の攻撃アニメーションを追加する

攻撃にアニメーションを追加して、リアルな敵キャラクターを作りましょう。AnimatorコンポーネントとAnimationクリップを使用して、敵が攻撃するときにアニメーションが再生されるようにします。


❏ おわりに ❏

この記事では、Unityで敵AIの攻撃プログラムを実装する方法について学びました。これにより、ゲームに更なる深みと興奮をもたらす敵キャラクターを作ることができます。


お知らせ

学習中に不明点があれば、「どこでもUnity教室」のDiscordコミニティから質問してください。教材の改善に役立てるためのフィードバックもお待ちしております。

どこでもUnity教室は、Unity初心者~中級者を中心に、ゲーム・アプリ・VR開発を学ぶオンライン教室です!

参加条件
Unityをこれから学習しようとしている方、または既に利用中の方。
(今後、一部サービスやテキストチャンネルが有料化、または記事購入者限定となる予定です。)

ご興味のある方は、以下のリンクからぜひお問い合わせください。


おすすめ記事


いいなと思ったら応援しよう!

ゲーム開発所RYURYU
よろしければサポートお願いします! いただいたサポートはクリエイターとしての活動費に使わせていただきます!by ゲーム開発所RYURYU