Day33 ウォームアップ(10分)【Unity 橋渡し①:コンポーネントっぽいクラス】
第2部:Unity 橋渡し(Day33〜Day35)
※10分の使い方は、「進め方(10分の使い方)」を参照
※生成AIは使いません
※全部できなくてOK
※今日のゴール目安:提出A(問題1が動く)で合格、提出B(1・2)で標準到達、提出C+発展で上位到達
今日の準備(ウォームアップの前に)
- Day33.cs を追加する(ソリューションエクスプローラーで、ソリューションの下にある プロジェクト「MiniPractice」を右クリック → 追加 → クラス → 名前を Day33.cs)
- Program.cs を開き、Main 内の
Day32.Run()をDay33.Run()に書き換える
最初に:今日のクラスの形を確認
今日から Unity の MonoBehaviour に近い文脈の練習に入ります。まだ Unity プロジェクトは使いません(いつもの コンソールの MiniPractice のままです)。
ゲームに出てくる敵をイメージした Enemy クラスを、Day33 の中に nested で定義します。
internal class Day33
{
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;
}
}
public static void Run()
{
// ここに書く
}
}
Hp… Unity ではHPと書くことが多いですが、C# のプロパティ名はHp(先頭だけ大文字)にそろえますTakeDamage… ダメージを受けてHpが減ります。0未満にならないよう、0 で止める処理が入っていますIsAlive…Hpが 1 以上ならtrue(倒れていなければtrue)
Unity とのつながり(イメージ)
Unity では「敵の体力」「ダメージを受ける」などを コンポーネント(クラス) に書きます。今日は コンソール上で同じ考え方(フィールド+メソッド)を体に覚えさせます。
🔹 出力について(教材共通)
教材では 簡潔な出力例(個数だけ・該当語のみ・数値のみなど)を載せています。条件・数え方・集約が正しければ、Console.WriteLine に「HP:」などのラベルや、$"…: {値}" のような説明付きで出しても構いません。
🔹 Day30 の振り返り(1分)
- LINQ …
Where/Count/Sumで、条件付きの列を短く書けました - 今日のポイント:ループや LINQ より前に、「1体の敵が
TakeDamageするとHpがどう変わるか」をnewとメソッド呼び出しで確かめます
🔹 今日のポイント
| やりたいこと | 例 |
|---|---|
| 敵を1体作る | Enemy e = new Enemy { Name = "スライム", Hp = 40 }; |
| ダメージを与える | e.TakeDamage(30); |
| まだ生きているか | if (e.IsAlive()) { ... } |
| 配列を回す | foreach (Enemy e in enemies) { ... } |
進め方(10分の使い方)
- 最初の5分:教科書・ノート・これまで自分が書いたコードも見ずに、自分の力だけで書いてみましょう。止まっても構いません。思い出そうとする時間が大事です。
- 後半5分:教科書・ノート・これまで自分が書いたコードを見てOKです。「どこを見ればよいか」「どう直せばよいか」を考えながら、完成に近づけましょう。
1限の過ごし方(目安)
細かい指示は Slack・スライド・口頭 に従ってください(教室のホワイトボードなどに書かれた内容があれば、それも含みます)。
| 時間(目安) | 内容 |
|---|---|
| 0〜15分 | ウォームアップ(準備・今日の課題・提出・動作確認)。課題の進め方は下の**「進め方(10分の使い方)」**のとおりです。 |
| 15〜45分 | 学習時間(これまでの Day 課題(提出コードの見直し・未完成の続き)、教科書の自習・予習など。Slack・スライド・口頭の指示を最優先) |
| 45〜50分 | 振り返りなど(指示に従う) |
- 提出が終わったら(ウォームアップの途中でも可)… Commit/Push と Slack「Day33 完了」は提出ルールに従い、採点を待たず次の学習に進みます。
提出ルール(重要)
- 提出A(最低ライン):問題1だけ動けばOK
- 提出B(標準):問題1・2まで
- 提出C(到達):問題1・2・3(余裕があれば発展)
- 提出方法:GitHub Desktop で Commit → Push してください。1問ごとでも、まとめて1回でもOKです。
- Slack:「Day33 完了しました」と一言送ってください。
■ 問題1(基礎)
次の Enemy を1体、Run() の中で作ってください。
- Name は
"スライム" - Hp は
40
つづけて TakeDamage(30) を1回呼び出し、つぎの 2行 を表示してください。
Name(文字列そのもの)Hpの値(数値そのもの。教材の例では10になります)
■ 問題2(条件)
次の enemies 配列を Run() の中に用意してください。
Enemy[] enemies =
{
new Enemy { Name = "スライム", Hp = 40 },
new Enemy { Name = "ゴブリン", Hp = 0 },
new Enemy { Name = "オーク", Hp = 25 },
};
IsAlive() が true になる Enemy だけについて、Name を1行ずつ表示してください。
- 教材のデータでは
スライムとオークの 2行 になります(ゴブリンはHpが0なのでIsAlive()はfalse)
■ 問題3(集計)
同じ enemies 配列について、IsAlive() が true になる Enemy が 何体いるかを数え、個数だけを1行で表示してください。
- 教材のデータでは
2です
■ 発展A(余裕がある人)
次の enemies2 配列を用意し、各 Enemy に対して TakeDamage(10) を1回ずつ呼び出してください(foreach で構いません)。
Enemy[] enemies2 =
{
new Enemy { Name = "スライム", Hp = 40 },
new Enemy { Name = "ゴブリン", Hp = 5 },
new Enemy { Name = "オーク", Hp = 80 },
new Enemy { Name = "ボス", Hp = 100 },
};
そのあと、IsAlive() が true になる Enemy だけを List<Enemy> に追加し、つぎの 順序どおりに表示してください。
- 追加した各
EnemyのNameを 1行ずつ(foreachで回す) - 追加した
EnemyのHpの合計を 1行 - 続けて、
Hpの平均を 1行(整数割り算でよいです →合計 / list.Count) - 続けて、
Hpの最大を 1行 - 続けて、
Hpの最小を 1行
数値の目安(TakeDamage(10) 後):生き残りは スライム(30)・オーク(70)・ボス(90) の 3体。合計 190、平均 63、最大 90、最小 30。
■ 発展B(発展Aが動いたらチャレンジ)
Enemy クラスに IsElite() メソッドを追加しましょう。
- メソッド名:
IsElite - 戻り値:
bool - 中身:
Hpが80以上のときtrueを返す(ちょうど80もtrue)
Run 内で IsElite() が true かつ IsAlive() が true になる Enemy の Name を1行ずつ表示してください。
- 教材の
enemies2でTakeDamage(10)後なら、オークはHpが70になりIsElite()はfalse(80未満のため)なので、ボスだけの 1行 になります
// 呼び出しのイメージ
foreach (Enemy e in list)
{
if (e.IsElite() && e.IsAlive())
{
Console.WriteLine(e.Name);
}
}
⚠️ つまずきやすい点
TakeDamageを呼んだあとにHpを読む … 問題1ではTakeDamage(30)のあとにConsole.WriteLineしますIsAlive()とHp > 0… 今日はIsAlive()を使う練習です(中身は同じ考え方です)- 発展Aの平均 … 分母は
list.Count(enemies2.Lengthではない) - 発展Bの
IsElite()…TakeDamage(10)のあとのHpで判定します(オークは70になりエリート条件を満たしません)
🎯 今日の目的
- **
Enemyのような「状態(Hp)+振る舞い(TakeDamage)」**を 1つのクラスにまとめる感覚をつかむ - Unity に入ったあと
MonoBehaviourのフィールドとメソッドを見たとき、今日のEnemyとつながるようにしておく
次へ
Day34 では、**回復(Heal)**と メソッドを呼ぶ順序をテーマにします。講師・Slack の指示に従って進めてください。



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