見出し画像

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

更新日 2024 / 03 / 17

自己紹介

\ ココナラ実績140件達成 /
こんにちは!ゲーム開発所RYURYUのりゅうやと申します。

お知らせ
📢 公式LINEを通じて、無料で相談や見積もりを提供しています!
Unity関連のお仕事の依頼や、エラー解決などのお悩み事に、経験豊富なプロフェッショナルが対応します。


はじめに

こんにちは、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の攻撃プログラムを実装する方法について学びました。これにより、ゲームに更なる深みと興奮をもたらす敵キャラクターを作ることができます。


おすすめ記事


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