Day35 ウォームアップ(10分)【Unity 橋渡し③:Player が Enemy を攻撃】
第2部:Unity 橋渡し(Day33〜Day35)
※10分の使い方は、「進め方(10分の使い方)」を参照
※生成AIは使いません
※全部できなくてOK
※今日のゴール目安:提出A(問題1が動く)で合格、提出B(1・2)で標準到達、提出C+発展で上位到達
今日の準備(ウォームアップの前に)
- Day35.cs を追加する(プロジェクト「MiniPractice」に Day35.cs を追加)
- Program.cs を
Day34.Run()からDay35.Run()に書き換える
最初に:コードの形を確認
Player が Enemy を引数に取る Attack でダメージを与える形にします(別インスタンス同士のメソッド呼び出し)。Unity では「プレイヤーの入力 → 敵に当たった → 敵の TakeDamage」のような流れがよく出てきます。
internal class Day35
{
class Enemy
{
public string Name { get; set; }
public int Hp { get; set; }
public void TakeDamage(int amount)
{
Hp -= amount;
if (Hp < 0)
{
Hp = 0;
}
}
public bool IsAlive()
{
return Hp > 0;
}
}
class Player
{
public string Name { get; set; }
public int AttackPower { get; set; }
public void Attack(Enemy target)
{
target.TakeDamage(AttackPower);
}
}
public static void Run()
{
// ここに書く
}
}
Attack(Enemy target)… 呼び出すとtarget側のTakeDamageが動きます(thisではなくtarget)PlayerとEnemyは別々にnewします
🔹 出力について(教材共通)
教材では 簡潔な出力例を載せています。ロジックが正しければ、ラベル付き出力も可です。
🔹 Day34 の振り返り(1分)
HealとTakeDamageの順で結果が変わる- 今日のポイント:**攻撃する側(
Player)**が **攻撃される側(Enemy)**を 引数で受け取る
進め方(10分の使い方)
- 最初の5分 … 自力。後半5分 … 過去コード閲覧OK。
1限の過ごし方(目安)
| 時間(目安) | 内容 |
|---|---|
| 0〜15分 | ウォームアップ |
| 15〜45分 | 学習時間 |
| 45〜50分 | 振り返りなど |
提出ルール(重要)
- 提出A … 問題1のみ / 提出B … 問題1・2 / 提出C … 問題1〜3(+発展)
- Slack:「Day35 完了しました」
■ 問題1(基礎)
次の Player と Enemy を1体ずつ作り、Attack を2回呼び出してください。
Player p = new Player { Name = "勇者", AttackPower = 18 };
Enemy e = new Enemy { Name = "スライム", Hp = 50 };
p.Attack(e);を2回(同じeに対して)- つぎの 2行 を表示する
e.Namee.Hp(教材の例では 50 − 18 − 18 = 14 なので14)
■ 問題2(条件)
次の Player と Enemy の配列を用意し、各 Enemy に対して Attack を1回ずつ呼び出してください(foreach で構いません)。
Player p = new Player { Name = "勇者", AttackPower = 20 };
Enemy[] enemies =
{
new Enemy { Name = "スライム", Hp = 40 },
new Enemy { Name = "ゴブリン", Hp = 25 },
new Enemy { Name = "オーク", Hp = 60 },
};
IsAlive() が true になる Enemy の Name を1行ずつ表示してください。
- 教材のデータでは 3体とも生存(
スライム・ゴブリン・オークの 3行)
■ 問題3(集計)
同じ enemies(問題2と同じ処理のあと)について、IsAlive() が true の 体数を 1行で表示してください。
- 教材のデータでは
3
■ 発展A(余裕がある人)
次の enemies2 について、**同じ Player(AttackPower は 22)**で 各 Enemy に Attack を1回ずつ呼び出してください。
Player p2 = new Player { Name = "勇者", AttackPower = 22 };
Enemy[] enemies2 =
{
new Enemy { Name = "スライム", Hp = 55 },
new Enemy { Name = "ゴブリン", Hp = 12 },
new Enemy { Name = "オーク", Hp = 90 },
new Enemy { Name = "ドラゴン", Hp = 35 },
};
IsAlive() が true だけを List<Enemy> に入れ、つぎの 順序どおりに表示してください。
- 各
Name(1行ずつ) Hpの合計(1行)Hpの平均(整数割り算、1行)Hpの最大(1行)Hpの最小(1行)
数値の目安(攻撃後、Hp は 33, 0, 68, 13。生存は 3体)… 合計 114、平均 38、最大 68、最小 13。
■ 発展B(発展Aが動いたらチャレンジ)
Enemy に IsEmergency() メソッドを追加してください。
- 戻り値:
bool IsAlive()がtrueかつHpが15以下のときtrue
enemies2 の攻撃後、IsEmergency() が true になる Enemy の Name を1行ずつ表示してください。
- 教材の目安:
ドラゴンの 1行(Hpが 13 のため)
⚠️ つまずきやすい点
p.Attack(e)… 引数eのHpが減ります(p.Hpはありません)Attackを複数回 … 同じEnemyに続けて呼ぶと その分だけTakeDamageが重ねられる、と説明できるとよいです
🎯 今日の目的
- 参照型として
EnemyをPlayerに渡す感覚(Unity では Collider や Raycast で「相手」を取得してTakeDamageなどにつながる)
次へ
このウォームアップ本線は Day35 で完結です。
Day36 以降は 講師・スライド・Slack の指示に従ってください(複数体の整理や小まとめなど、教室で案内される内容に進みます)。



ディスカッション
コメント一覧
まだ、コメントがありません