スクリプタブルオブジェクトを使用したエネミータイプ | AIシリーズ第5部 | Unityチュートリアル
目次:
- AIシリーズの第5部:スクリプタブルオブジェクトを使用したナビメッシュエージェントの設定
- エネミースクリプタブルオブジェクトの作成
- エージェントの設定
- 敵の設定
- アクティブ化時の設定
- 基本エネミーの作成と設定
- ロングエネミーの作成と設定
- ナビメッシュの設定
- 敵プレハブのリストに追加
- テストプレイして確認
AIシリーズの第5部:スクリプタブルオブジェクトを使用したナビメッシュエージェントの設定 💻
AIシリーズの第4部では、実行時にナビメッシュエージェントを動的に生成しました。この動画では、スクリプタブルオブジェクトを使用してエージェントを正しく設定する方法について説明します。この動画は、このシリーズの他の動画でビルドするための重要な部分ですので、必ず理解しておいてください。
1. エネミースクリプタブルオブジェクトの作成 ✏️
まず、新しいスクリプトを作成します。このスクリプトは「EnemyScriptableObject」という名前にし、ScriptableObjectのサブクラスにします。このスクリプトは、エネミーの基本ステータスを保持し、オブジェクトの作成時にこれらのステータスを変更してエネミーを強化したり、ナビメッシュエージェントを設定したりすることができます。
using UnityEngine;
[CreateAssetMenu(fileName = "EnemyConfiguration", menuName = "ScriptableObjects/EnemyConfiguration")]
public class EnemyScriptableObject : ScriptableObject
{
public float aiUpdateInterval;
// Add other configurations for the navmesh agent here
}
このクラスにはCreateAssetMenu
属性を追加し、ファイル名を「EnemyConfiguration」、メニュー名を「ScriptableObjects/EnemyConfiguration」と設定します。これにより、Unityエディタのプロジェクトパネルで右クリックし、「Create ScriptableObject」→「Enemy Configuration」を選択することで、EnemyConfigurationのスクリプタブルオブジェクトを作成できるようになります。
次に、ナビメッシュエージェントに設定されている構成のすべてを追加します。これには、加速度、角速度、エリアマスク、回避優先度、ベースオフセット、高さ、障害物回避タイプ、半径、速度、および停止距離などがあります。デフォルト値を使用してこれらの設定を提供します。
2. エージェントの設定 ✏️
エネミークラスにEnemyScriptableObject
への参照を追加します。
public EnemyScriptableObject enemyScriptableObject;
また、エージェントの設定を行うためのsetupAgentFromConfiguration
メソッドを作成します。
public virtual void SetupAgentFromConfiguration()
{
// Set all the configurations of the navmesh agent and the enemy movement from the scriptable object
agent.acceleration = enemyScriptableObject.acceleration;
agent.angularSpeed = enemyScriptableObject.angularSpeed;
// Set other configurations here
}
また、OnEnable()
メソッドを作成し、エージェントが有効になるたびに設定を行います。
public virtual void OnEnable()
{
SetupAgentFromConfiguration();
}
これで、エージェントの設定がスクリプタブルオブジェクトによって行われるようになりました。
3. 敵の設定 ✏️
エネミースクリプタブルオブジェクトの基本設定を行います。Unityエディタのプロジェクトパネルで右クリックし、「Create」→「Scriptable Objects」→「Enemy Configuration」を選択します。作成したオブジェクトを「basicEnemy」という名前でリネームし、基本エネミーのプレハブにドラッグアンドドロップします。
このスクリプタブルオブジェクトの値は、基本的なエネミーに合わせたものにしておきます。速度は2ユニット/秒に設定します。
4. アクティブ化時の設定 ✏️
エネミーのアクティブ化時に設定を行うために、OnEnable()
メソッドを呼び出します。
public override void OnEnable()
{
base.OnEnable();
// Set other configurations here
}
このメソッドは、エネミーが再利用されるたびに呼び出されるため、設定をリセットするために使用します。
5. 基本エネミーの作成と設定 ✏️
基本エネミーのプレハブをシーンにドラッグアンドドロップし、モデルのスケールを調整して高さを3に変更します。速度も3に設定して、より速く移動するようにします。
さらに、エネミープレハブにEnemyScriptableObject
参照をドラッグアンドドロップします。
6. ロングエネミーの作成と設定 ✏️
ロングエネミーの設定も同様に行います。
7. ナビメッシュの設定 ✏️
ナビゲーションパネルを開き、エージェントのタブを選択します。[+]ボタンをクリックして新しいエージェントタイプを作成します。これを「tall enemy」と名前を付けて、高さを3、半径を0.33に設定します。
次に、エネミースクリプタブルオブジェクトの半径も0.33に設定します。
8. 敵プレハブのリストに追加 ✏️
EnemyManagerを選択し、敵プレハブのリストにロングエネミーを追加します。
9. テストプレイして確認 ✅
プレイボタンをクリックしてテストプレイを開始し、ナビメッシュエージェントが正しく生成されることを確認します。基本エネミーが3体、ロングエネミーが2体生成されます。""",
"以下の場所に敵が生成されたことがわかります。また、ロングエネミーは2階の天井が近すぎて通過できないため、基本エネミーやプレイヤーとは異なる経路を取ります。
この動画が役に立ち、コンポーネントの値をスクリプタブルオブジェクトで制御できる方法を理解していただけたら幸いです。この方法は、将来の動画でエネミーをスケールアップする際に使う予定です。もちろん、具体的な内容はまだ決まっていませんが、単純な値を適用するだけではない処理を行いますので、この方法を理解しておく必要があります。
もし、何か質問や別のトピックの提案、このシリーズを見てAIをゲームに実装した結果についてコメントがあれば、ぜひコメント欄に書き込んでください。次の動画でお会いしましょう!"
ハイライト ✨
- スクリプタブルオブジェクトを使用してナビメッシュエージェントを動的に設定する方法
- オブジェクトプーリングを使用してエネミーを再利用する方法
- エネミーの基本ステータスを調整するスクリプタブルオブジェクトの作成方法
\この動画では、スクリプタブルオブジェクトを使用してエネミーの基本ステータスを設定し、ナビメッシュエージェントを効果的に制御する方法を学びました。\ この方法は、将来の動画でさらに進んだ処理を行うための基礎ですので、しっかりと理解しておいてください。次の動画では、さらに高度な設定や動作を追加する予定ですので、お楽しみに!
よくある質問 ✋
Q: スクリプタブルオブジェクトを使用するとどのような利点がありますか?
A: スクリプタブルオブジェクトを使用すると、コンポーネントの設定値を簡単に切り替えることができます。また、複数のエネミーに共通の設定を適用することもできます。
Q: オブジェクトプーリングはなぜ重要ですか?
A: オブジェクトプーリングを使用すると、エネミーの生成や削除のたびにオブジェクトを作成する必要がなくなります。再利用することでパフォーマンスを向上させることができます。
Q: エネミーのスクリプタブルオブジェクトを変更することで、難易度を調整することはできますか?
A: はい、エネミーの基本ステータスをスクリプタブルオブジェクトで設定することで、難易度を調整することができます。難易度を高めるには、ステータスを大きく設定するか、難易度を下げるには、ステータスを小さく設定することができます。
リソース: