復習:モジュール式タレット
CoddyのUnityジャーニー「Unityにおけるゲームアーキテクチャ」セクションの一部。レッスン 5/50。
チャレンジ
簡単テスト射場の2基の砲塔を、パーツから組み立てましょう。TurretControl.csはすでに左右の矢印キーで各砲塔を回転させ、Shell.csは砲弾を前方に飛ばします。シーンでは、Turret1にCannonと砲弾4発入りのAmmo、Turret2にTwinCannonと砲弾3発入りのAmmoが設定されています。各パーツを作成しましょう。
- Ammo:public int
shellsと、publicメソッドbool Take()を作成します。砲弾が残っている場合は1発使い、trueを返します。砲弾が残っていない場合は、オブジェクトの名前とis emptyを使ってログを出力します(例:Turret2 is empty)。その後、falseを返します。 - Weapon:必ずAmmoを持つ抽象コンポーネントです。publicな
shellPrefab(GameObject)、public floatcooldown(Inspectorで1に設定)、publicメソッドPull()を作成します。クールダウン中にトリガーを引いても何も起こらず、砲弾も消費しません。それ以外の場合、Take()で砲弾を取得できたら、クールダウンを開始し、Fire()を実行します。Fire()は各武器で実装する抽象メソッドです。 - Cannonは砲塔の前方1ユニットの位置から砲弾を1発発射します。TwinCannonは砲弾1発分の弾薬で2発発射します。発射位置は、基準位置から左に0.4、右に0.4です。砲弾は
transform.position + transform.rotation * offsetの位置から、砲塔と同じ向き(transform.rotation)で発射されます。ここでoffsetは砲塔から見た位置で、たとえばnew Vector3(0f, 0f, 1f)です。 - TurretControlでは、Spaceキーを押すと、その砲塔が持つWeaponのトリガーを引きます。
Playを押して、両方の砲塔の弾がなくなるまで向きを変えて発射し、その後Checkを押してください。
自分で試してみよう
using UnityEngine;
// すべてのタレット武器に共通するもの。
public class Weapon : MonoBehaviour
{
}