![見出し画像](https://assets.st-note.com/production/uploads/images/111963847/rectangle_large_type_2_ca8321a6a8fc79b931008ec7163d23e5.png?width=1200)
敵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エディタ内で敵オブジェクトにアタッチする方法を説明します。
Unityエディタを開いて、Hierarchyウィンドウで敵オブジェクトを選択します。
作成したスクリプト(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ウィンドウで行います。
敵オブジェクトを再びHierarchyウィンドウで選択します。
Inspectorウィンドウで、EnemySightスクリプトとEnemyAttackスクリプトの各パラメータ(例:fieldOfViewAngle, timeBetweenAttacks)を設定します。
これで、敵オブジェクトの挙動がスクリプトに従って制御され、設定したパラメータに基づいて動作します。
5.敵の攻撃アニメーションを追加する
攻撃にアニメーションを追加して、リアルな敵キャラクターを作りましょう。AnimatorコンポーネントとAnimationクリップを使用して、敵が攻撃するときにアニメーションが再生されるようにします。
❏ おわりに ❏
この記事では、Unityで敵AIの攻撃プログラムを実装する方法について学びました。これにより、ゲームに更なる深みと興奮をもたらす敵キャラクターを作ることができます。
お知らせ
学習中に不明点があれば、「どこでもUnity教室」のDiscordコミニティから質問してください。教材の改善に役立てるためのフィードバックもお待ちしております。
どこでもUnity教室は、Unity初心者~中級者を中心に、ゲーム・アプリ・VR開発を学ぶオンライン教室です!
参加条件
Unityをこれから学習しようとしている方、または既に利用中の方。
(今後、一部サービスやテキストチャンネルが有料化、または記事購入者限定となる予定です。)
ご興味のある方は、以下のリンクからぜひお問い合わせください。
おすすめ記事
いいなと思ったら応援しよう!
![ゲーム開発所RYURYU](https://assets.st-note.com/production/uploads/images/128268055/profile_28b8810144b6d3f716f55694b5c66ccd.jpg?width=600&crop=1:1,smart)