Unity チュートリアルのタワーディフェンステンプレートを触ってみる(13)では AttackingAgent と FlyingAgent について解説を行った。これで「エージェント編」は一通り完了したことになる。今回から「標的設定と砲撃編」を進めていく。
1.標的設定と砲撃編 – 概要
Unity チュートリアルのタワーディフェンステンプレートを触ってみる(2)で述べた通り、Unity のチュートリアルに沿って作業を進めていく。ということで次に標的設定と砲撃について進めていく。
Unity 公式ページの「標的設定と砲撃」についてはこちらを参照してほしい。
The previous section provided instructions on how to create Agents and Towers, but didn't cover how to actually have them fire at each other. This tutorial covers the components and processes required for both enemies and towers to attack and return fire. Targeting and Firing - Unity Learn - Unity Learn |
『前のセクションでは、エージェントとタワーを作成する方法についての概要を説明しましたが、エージェントとタワーを互いに攻撃させる方法についてはまだ実際に説明していません。これは主に、敵とタワーの両方に同じコンポーネントとプロセスが必要であるためです。このセクションでそれらを説明します。』
2.標的設定と砲撃編 – 砲弾を作成する
『エージェントとタワーを砲撃できるようにするには、互いに攻撃するための砲弾を作る必要があります。ダメージの程度は、タワーまたはエージェント自体ではなく、砲弾のプロパティーに含まれます。』とのことなので指示に従って砲弾の作成を進める。基本的な作成方法は以下の通りだが、砲弾の種類によって作り方が異なるとのこと。
- 空のゲームオブジェクトを作成し、タワー/エージェントのタイプ、単語 projectile、必要な場合は関連するレベル (LaserTowerProjectile_1 など) で構成される名前を付けます。
- 新しい砲弾のゲームオブジェクトに Damager コンポーネントを加えます。
- 攻撃がヒットしたときにタワーやエージェントから奪われる耐久力の量を表す Damage フィールドを設定します。
- タワーの砲弾の場合は Player (SimpleAlignment) スクリプタブルオブジェクトを Alignment フィールドにドラッグします。エージェントの場合は、Enemy (SimpleAlignment) スクリプタブルオブジェクトを Alignment フィールドにドラッグします。
『これからの手順は、どのような種類の砲弾を作るかによります。 弾道や衝突の検出に依存しないヒットスキャンの砲弾の場合は以下の通りです。』
- 砲弾ゲームオブジェクトに HitscanAttack コンポーネントを加えます。
- Delay フィールドに任意の秒数を設定します。
『ロケットなどの砲弾では、砲弾がオブジェクトと衝突したかどうか、そして、衝突した位置を確認してダメージを決定します。』
- 砲弾ゲームオブジェクトに BallisticProjectile コンポーネントを加えます。
- 砲弾ゲームオブジェクトに RigidBody と CapsuleCollider コンポーネントを追加して、砲弾と環境の衝突を確実に検出できるようにします。
- ContactDestroyer コンポーネントを追加すると、衝突後に砲弾は破棄されます。
『砲弾がより広い半径でダメージを与える場合は、次の手順を行います。』
- 砲弾ゲームオブジェクトに SplashDamager コンポーネントを加えます。
- Attack Range フィールドに効果を及ぼす範囲の半径を設定します。
- Damage Amount フィールドの値を、砲弾が直接あたらなかった場合にエージェント/タワーが受けるダメージの量に設定します。
今回は Prefab にある LaserTowerProjectile_0 を参考にレーザー用のゲームオブジェクトを作成した。本来の LaserTowerProjectile_0 では Poolable コンポーネントも付随しているのだが、今回は上記の指示通り Damager と HitscanAttack コンポーネントのみ適応している。Poolable については章を進める中で出てきたときに改めて解説させていただく。
Damager については「Assets/Scripts/ActionGameFramework/Health/Damager.cs」をドラッグアンドドロップして使用している。
HitscanAttack については「Assets/Scripts/TowerDefense/Towers/Projectiles/HitscanAttack.cs」をドラッグアンドドロップして使用している。
このときの各パラメータについては LaserTowerProjectile_0 の Prefab を参考に Damager では以下の通り。
- Damage : 12
- Chance To Spawn Collision Prefab : 1
- Collision Particles : 「Assets/Particles/Prefabs/LaserImpactPFX」
- Alignment : 「Assets/Data/Alignments/Player」
また、HitscanAttack についても同様に以下の通りとした
- Delay : 0.25
3.タワーに標的設定を加える
『以下の手順では、タワーとエージェントの両方の標的設定が可能になります。スターターキットでは、タワーの AttackAffector に別の子ゲームオブジェクトを使いますが、コンポーネントはエージェントのプレハブにアタッチされます。純粋に整理方法上の違いであり、AttackAffector の機能は変わりません。』とのことなので、以下の指示に従いタワーに対して AttackAffector コンポーネントを追加していきたいと思う。
- タワーレベル/エージェントプレハブの空の子ゲームオブジェクトを作成し、Affector という名前を付けます。このオブジェクトによって、タワーとエージェントが互いに攻撃できるようになります。
- Affector ゲームオブジェクトに適当な Launcher コンポーネントを加えます。
- Affector ゲームオブジェクトに AttackAffector コンポーネントを加えます。
- 砲弾のプレハブを Projectile フィールドにドラッグアンドドロップします。
- タワー/エージェントが砲弾を発射する地点として Projectile Points を追加します。
- タワー/エージェントの Fire Rate (砲撃頻度) を設定します。
- Tower レベルまたは Agent プレハブの子として空のゲームオブジェクトを作成し、「Targetter」という名前にします。次に Targetter コンポーネントをゲームオブジェクトに適用します。このオブジェクトを作ると、タワーが砲撃するエージェントを見つけられるようになります。
- タワーレベルの砲台の Transform を Turret フィールドにドラッグアンドドロップします。砲台として設定されたオブジェクトは、エージェントを標的にします。
- タワーレベルの Search Rate (検索頻度) を設定します。
- タワーレベルの Targetter Collider を Sphere (スフィア) または Capsule (カプセル) に設定します。
- Radius と Vertical Range のフィールドを設定します。
- Hierarchy ウィンドウで Affector ゲームオブジェクトを選択して、Targetter ゲームオブジェクトを AttackAffector コンポーネントの Tower Targetter フィールドにドラッグアンドドロップします。
- タワープレハブに変更を適用します。
『上記の手順によって、エージェントが、プレイヤー本拠地への経路を妨害するタワーに向かって武器を発射できるようになります。エージェントがプレイヤーの本拠地にダメージを与えられるようにするには、以下の手順を行います。』
- エージェントプレハブに HomeBaseAttacker を加えます。
- エージェントが本拠地に達する場合に、攻撃する前に充填に必要な秒数を設定します。
まずは Affector について進めていく。その際、 Prefab にある LaserTower_0 を参考にタワー用のゲームオブジェクトを改良した。自作した LayserTower_0 に対して空のゲームオブジェクトを Affector として追加し、そのゲームオブジェクトに HitscanLancher と AttackAffector を追加している。それぞれのコンポーネントは「Assets/Scripts/TowerDefense/Towers/TowerLaunchers/HitscanLauncher.cs」と「Assets/Scripts/TowerDefense/Affectors/AttackAffector.cs」を使用している。
HitscanLancher の各パラメータについては Prefab を参考に以下の通りとした。
- Fire Particle System : Prefab に登録されている LayserTower_0 から LaserFireEffect を取り出しパラメータとした
また、AttackAffector の各パラメータについては Prefab を参考に以下の通りとした。
- 説明 : 「Offensive」
- Projectile : 「Assets/Prefabs/Towers/Laser/LaserProjectile_0」
- Projectile Points(サイズ) : 1
- Projectile Points(サイズ) : 空のゲームオブジェクトを LaserTower_TURRET_L01 の下に 「ProjectilePoint」という名前で作成し作成しトランスフォームの位置に x : 0.03853759、y : -0.041、z : 1.052 とした
- Epicenter : 自作した LayserTower_0
- Fire Rate : 0.3
- Random Audio Source : HitscanLancher のパラメータに使用した LaserFireEffect
- Tower Targgetter : 次に作成する Targgetter
次には Targgetter について進めていく。その際、 Prefab にある LaserTower_0 を参考にタワー用のゲームオブジェクトを改良した。自作した LayserTower_0 に対して空のゲームオブジェクトを Targgetter として追加し、そのゲームオブジェクトに Targgetter を追加している。コンポーネントは「Assets/Scripts/TowerDefense/Targetting/Targetter.cs」を使用している。
Targgetter の各パラメータについては Prefab を参考に以下の通りとした。
- Turret : 自作した LayserTower_0 の「LaserTower_TURRET_L01」ゲームオブジェクト
- Turrt X Totation Range : x : 0、y : 0
- Only Y TurretRotation : チェックを入れる
- Search Rate : 1
- Idle Rotation Speed : 39
- Idle Correction Time : 2
- Attached Collider : Targgeter ゲームオブジェクト
- Idle Wait Time : 2
- Targetter Collider : カプセル
- Radius : 12
- Vertical Range : 4
今回、出てきたスクリプトについては次回以降改めて解説させていただく。
Assets/Scripts/ActionGameFramework/Health/Damager.cs について、稚拙ながら解説させていただいた。記事については以下を参照してほしい。
Damager
Unity チュートリアルのタワーディフェンステンプレートを触ってみる(14)では「標的設定と砲撃編」を進め、砲弾の作成とタワーオブジェクトの改良を行った。今回は砲弾に対して追加した Damager コンポーネントの解説を進めていく。1.標的設定と砲撃編 – Damager.csDamager.cs について稚拙ながら解説「Damager.cs」は「Assets/Scripts/ActionGameFramework/Health/Damager.cs」の指しておりスクリプトについては以下の通り。内容としてはダメージ量の保持とダメージを与えられるかの判定を行っている。using System;using Core.... Unity チュートリアルのタワーディフェンステンプレートを触ってみる(15) - StudioFun |
Assets/Scripts/TowerDefense/Towers/Projectiles/HitscanAttack.cs について、稚拙ながら解説させていただいた。記事については以下を参照してほしい。
HitscanAttack
Unity チュートリアルのタワーディフェンステンプレートを触ってみる(15)では砲弾に対して追加した Damager コンポーネントの解説を進めた。今回は同様に砲弾に対して追加した HitscanAttack コンポーネントに付いて解説を進めていく。1.標的設定と砲撃編 – HitscanAttack.csHitscanAttack.cs について稚拙ながら解説「HitscanAttack.cs」は「Assets/Scripts/TowerDefense/Towers/Projectiles/HitscanAttack.cs」の指しておりスクリプトについては以下の通り。内容としてはダメージを与える処理を行っている。using ActionGameFr... Unity チュートリアルのタワーディフェンステンプレートを触ってみる(16) - StudioFun |
Assets/Scripts/TowerDefense/Affectors/AttackAffector.cs および、継承関係、インタフェースの Affector.cs 、ITowerRadiusProvider について稚拙ながら解説させていただいた。それぞれの記事については以下を参照してほしい。
Affector
Unity チュートリアルのタワーディフェンステンプレートを触ってみる(16)では砲弾に対して追加した HitscanAttack コンポーネントについて解説を行った。今回は LaserTower_0 に追加した AttackAffector コンポーネントの継承関係にある Affector を行っていく。1.標的設定と砲撃編 – Affector.csAffector.cs について稚拙ながら解説「Affector.cs」は「Assets/Scripts/TowerDefense/Affectors/Affector.cs」の指しておりスクリプトについては以下の通り。内容としては Affector の初期化のみを行っている。using Core.Health;us... Unity チュートリアルのタワーディフェンステンプレートを触ってみる(17) - StudioFun |
ITowerRadiusProvider
Unity チュートリアルのタワーディフェンステンプレートを触ってみる(17)では LaserTower_0 に追加した AttackAffector コンポーネントの継承関係にある Affector を行った。今回は LaserTower_0 に追加した AttackAffector コンポーネントのインタフェースにある ITowerRadiusProvider の解説を行っていく。1.標的設定と砲撃編 – ITowerRadiusProvider.csITowerRadiusProvider.cs について稚拙ながら解説「ITowerRadiusProvider.cs」は「Assets/Scripts/TowerDefense/Towers/ITowerRadiusProvider.cs」の指しておりスクリプトに... Unity チュートリアルのタワーディフェンステンプレートを触ってみる(18) - StudioFun |
AttackAffector
Unity チュートリアルのタワーディフェンステンプレートを触ってみる(18)では LaserTower_0 に追加した AttackAffector コンポーネントのインタフェースにある ITowerRadiusProvider の解説を行った。今回は LaserTower_0 に追加した AttackAffector の解説を行っていく。1.標的設定と砲撃編 – AttackAffector.csAttackAffector.cs について稚拙ながら解説「AttackAffector.cs」は「Assets/Scripts/TowerDefense/Affectors/AttackAffector.cs」の指しておりスクリプトについては以下の通り。内容としては砲撃に関する処理を行っ... Unity チュートリアルのタワーディフェンステンプレートを触ってみる(19) - StudioFun |
Assets/Scripts/TowerDefense/Towers/TowerLaunchers/HitscanLauncher.cs および、継承関係の Launcher.cs について稚拙ながら解説させていただいた。それぞれの記事については以下を参照してほしい。
Launcher
Unity チュートリアルのタワーディフェンステンプレートを触ってみる(19)では LaserTower_0 に追加した AttackAffector の解説を行った。今回は LaserTower_0 に追加した HitscanLauncher のインタフェースである ILauncher の解説を行っていく。1.標的設定と砲撃編 – ILauncher.csILauncher.cs について稚拙ながら解説「ILauncher.cs」は「Assets/Scripts/TowerDefense/Towers/ILauncher.cs」の指しておりスクリプトについては以下の通り。内容としては砲撃処理の関数定を行っている。using System.Collections.Generic;using A... Unity チュートリアルのタワーディフェンステンプレートを触ってみる(20) - StudioFun |
ILauncher
Unity チュートリアルのタワーディフェンステンプレートを触ってみる(20)では LaserTower_0 に追加した HitscanLauncher のインタフェースである ILauncher の解説を行った。今回は LaserTower_0 に追加した HitscanLauncher の継承関係にある Launcher の解説を行っていく。1.標的設定と砲撃編 – Launcher.csLauncher.cs について稚拙ながら解説「Launcher.cs」は「Assets/Scripts/TowerDefense/Towers/TowerLaunchers/Launcher.cs」の指しておりスクリプトについては以下の通り。内容としては複数個に対する砲撃処理を行ってい... Unity チュートリアルのタワーディフェンステンプレートを触ってみる(21) - StudioFun |
HitscanLauncher
Unity チュートリアルのタワーディフェンステンプレートを触ってみる(21)では LaserTower_0 に追加した HitscanLauncher の継承関係にある Launcher の解説を行った。今回は LaserTower_0 に追加した HitscanLauncher の解説を行っていく。1.標的設定と砲撃編 – HitscanLauncher.csHitscanLauncher.cs について稚拙ながら解説「HitscanLauncher.cs」は「Assets/Scripts/TowerDefense/Towers/TowerLaunchers/HitscanLauncher.cs」の指しておりスクリプトについては以下の通り。内容としては単体への砲撃処理を行っている。using Ac... Unity チュートリアルのタワーディフェンステンプレートを触ってみる(22) - StudioFun |
Assets/Scripts/TowerDefense/Targetting/Targetter.cs および、継承関係の Targetter.cs について稚拙ながら解説させていただいた。記事については以下を参照してほしい。
Targetter
Unity チュートリアルのタワーディフェンステンプレートを触ってみる(22)では LaserTower_0 に追加した HitscanLauncher の解説を行った。今回は LaserTower_0 に追加した Targetter の解説を行っていく。1.標的設定と砲撃編 – Targetter.csTargetter.cs について稚拙ながら解説「Targetter.cs」は「Assets/Scripts/TowerDefense/Targetting/Targetter.cs」の指しておりスクリプトについては以下の通り。内容としてはタレットを目標に合わせる処理を行っている。using System;using System.Collections.Generic;using ActionGame... Unity チュートリアルのタワーディフェンステンプレートを触ってみる(23) - StudioFun |