サイトアイコン StudioFun

Unity チュートリアルのタワーディフェンステンプレートを触ってみる(11)

Unity チュートリアルのタワーディフェンステンプレートを触ってみる(10) では「SimpleAlignment.cs」とインタフェースとなっている「IAlignmentProvider.cs」について解説を行っていた。今回からエージェント(敵ユニット)の作成を進めていく。

1.エージェント編 – 概要

Unity チュートリアルのタワーディフェンステンプレートを触ってみる(2)で述べた通り、Unity のチュートリアルに沿って作業を進めていく。ということで次にエージェントについて進めていく。

『さて、タワーを作成したので、タワーに攻撃をしかけてくる何かが必要になります。このセクションでは、プレイヤーの本拠地を攻撃しようとする敵エージェントを作成する方法について説明します。敵エージェントをステージの周りで移動させるプロセスの大部分は、ステージの設定 で説明します。その前に、まずエージェントゲームオブジェクトに必要なコンポーネントを設定する必要があります。

これらの自立したキャラクターをここでは、「敵 (Enemy)」ではなく「エージェント (Agent)」と表現することにします。』

2.エージェント編 – エージェント設定データを作成する

『まず Agent Configuration を作成します。

Agent Configuration が作成できたので、エージェントの値を設定できます。』

とのことなので、Agent Configuration を作成を作成していく。

エージェント設定データの作成

Agent Configuration では名前と説明、Prefab の設定を行う必要があるが、今回はすでに、作成済みのデータが「Asset/Data/Agents」にデータがあるためそちらを使用していく。

エージェント設定データの入力項目

稚拙ながら少々解説

「Agent Configuration」は 「Assets/Scripts/TowerDefense/Agents/Data/AgentConfiguration.cs」ファイルをもとに生成している。内容としては Tower の設定情報を保持するだけの簡単なクラス構成となっている。

[cce_csharp]using UnityEngine;

namespace TowerDefense.Agents.Data
{
    [CreateAssetMenu(fileName = "AgentConfiguration.asset", menuName = "TowerDefense/Agent Configuration", order = 1)]
    public class AgentConfiguration : ScriptableObject
    {
        /// <summary>
        /// The name of the agent
        /// </summary>
        public string agentName;

        /// <summary>
        /// Short summary of the agent
        /// </summary>
        [Multiline]
        public string agentDescription;

        /// <summary>
        /// The Agent prefab that will be used on instantiation
        /// </summary>
        public Agent agentPrefab;
    }
}[/cce_csharp]

3行目「namespace」は簡単に例えるとフォルダ構成のようなもので、「TowerDefense」フォルダの中にある「Agents」フォルダの中にある「Data」フォルダを指しているようなものだと思っていただくのがわかりやすいだろう。

5行目「[CreateAssetMenu(fileName = “AgentConfiguration.asset”, menuName = “TowerDefense/Agent Configuration”, order = 1)]」は Asset のメニューに対して「Agent Configuration」を追加する定型文である。

6行目「public class AgentConfiguration : ScriptableObject」については別途記事をまとめているためこちらを参照してほしい。

Unity ではデータを管理する手法の一つとして ScriptableObject というものがある。 Grow Up Monsters ではいくつものカードのデータを作成管理を行わなければならない。そこで Unity の ScriptableObject の使い方についてまとめていきたいと思う。1.ScriptableObject とは「ScriptableObject はスクリプトインスタンスから独立した大量の共有データを格納できるクラスです。SerializedObject と混同しがちですが、こちらはエディタークラスであり、目的も違うものです。例えば 百万の配列をもつスクリプトでプレハブ作ったとします...
Unity の ScriptableObject を用いてカードのデータを管理する - StudioFun

それ以降については、保持するデータをグローバル変数として定義しているのみであるため、解説は省略させていただく。

2.エージェント編 – エージェント用ゲームオブジェクトを作成する

『次に、エージェントのゲームオブジェクトを作成します。』

とのことなので指示通り「エージェントのゲームオブジェクト」を作成していく。チュートリアルの手順では以下の通りとなっている。

上記の指示通り空の GameObject に対して「NewAgent 」という名称を付け、BallisticLauncher と AttackingAgent コンポーネントを追加した。その後、Ememy (SimpleAlignment) スクリプタブルオブジェクトを Alignment フィールド にドラッグした。また、モデルにつてはチュートリアルに付属している Hoverbuggy の Prefab を参考に設定を行った。すべての手順が完了すると以下の通りとなった。

HitscanLauncher と BallisticLauncher の違い

BallisticLauncher は弾道計算を行うランチャーを定義する際に使用する。イメージとしては大砲などがイメージに近いと思われる。

HitscanLauncher は弾道が存在しないランチャーを定義する際に使用する。レーザービームのような一直線に進むものがイメージに近いと思われる。

AttackingAgent と FlyingAgent の違い

AttackingAgent 目標に到達するまでに障害があればそれを破壊しながら進むエージェントを定義する際に使用する。戦車などがイメージに近いと思われる。

FlyingAgent 目標に到達するまでに障害があってもそれを無視しながら進むエージェントを定義する際に使用する。ヘリや戦闘機などがイメージに近いと思われる。

※ 注意

この時点ではすべての設定が完了していないためエラーが発生する。

エージェントオブジェクトの作成

その後、『NavMeshAgent コンポーネントは、AttackingAgent または FlyingAgent コンポーネントの追加時に自動的に加えられます。NavMeshAgent コンポーネントは、エージェントをレベルで移動させるために必要です。NavMeshAgent コンポーネントで定義された値は、移動の仕方を指定します。

タワーの場合と同様に、エージェントは AttackingAgent または FlyingAgent コンポーネントを単にゲームオブジェクトにアタッチするだけでは定義されません。エージェントが必要な動作を行うためには、他のコンポーネントが必要です。

Collider コンポーネントは、エージェントが砲撃に当たったかどうかを判断するために必要です。

とのことなので、Hoverbuggy の Prefab を参考に Collider には カプセル Collider を使用し、NewAgent に対して DamageCollider を追加する。

 

今回新たに出てきた AttackingAgent と FlyingAgent については改めて解説させていただくことにする。また、 HitscanLauncher と BallisticLauncher は『標的設定と砲撃』について進める際に合わせて解説させていただきたいと思う。

DamageCollider については以前に解説を行ったためこちらの記事を参照してほしい。

Unity チュートリアルのタワーディフェンステンプレートを触ってみる(8) では「DamageCollider.cs」の継承関係にある「DamageZone.cs」の解説を行っていた。今回は「DamageCollider.cs」について解説を行っていく。「DamageCollider.cs」は「DamageZone.cs」を継承している。そのため前回は「DamageCollider.cs」解説する前に「DamageZone.cs」について解説を行っていた。「DamageZone.cs」の解説についてはこちらを参照してほしい。1.タワー編 – DamageCollider.csDamageCollider.cs について稚拙ながら解説「DamageCollider.cs...
Unity チュートリアルのタワーディフェンステンプレートを触ってみる(9) - StudioFun

 

モバイルバージョンを終了