タワーのレベル
Coddyの「Unityゲーム:タワーディフェンス」コースのレッスン 16/25。
タワーはアップグレードされます。レベルごとにダメージと射程が増加し、アップグレードの費用は前回より高くなります。レベルには規則性があるため、アセットには数値のリストではなく規則を保持し、ScriptableObject のメソッドで計算することで、どのスクリプトが尋ねても同じ答えが得られます。農場ゲームにおける作物の例:
public int YieldAt(int level)
{
return baseYield + yieldPerLevel * (level - 1);
}レベル 1 は基本値です。タワーは自身のlevelだけを保持し、そのレベルに応じた数値で攻撃します。
チャレンジ
中級タワーにレベルを設定しましょう。
TowerDataに、public intのmaxLevel、upgradeCost、damagePerLevelと、public floatのrangePerLevelを追加します。DamageAt(int level)を追加します:damage + damagePerLevel * (level - 1)。RangeAtも同様に追加します。UpgradeCost(int level)を追加します:upgradeCost * level。Towerに、private int level = 1;、public int Level => level;、public void Upgrade() { level++; }を追加します。RangeAt(level)の範囲内で、DamageAt(level)を使って攻撃します。
「プレイ」を押すと、タワーはこれまでどおり戦います。その後、「確認」を押します。
自分で試してみよう
using UnityEngine;
[CreateAssetMenu(fileName = "NewTower", menuName = "Tower Defense/Tower Data")]
public class TowerData : ScriptableObject
{
public string towerName;
public int cost = 50;
public int damage = 2;
public float range = 4f;
public float fireRate = 1f;
}
Unityゲーム:タワーディフェンスのすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド