【学習】Unity で C# を学ぶなら「new」から一歩進もう(Player と Enemy で体験するオブジェクトの世界)
Unity の学習初期では、C# の理解を優先して次のようなコードを書くことがあります。
Player myPlayer = new Player();
これは「クラスからインスタンスを生成する」という意味では正しいのですが、Unity の世界観とは少しズレています。
今回はこのコードを出発点にして、「Unity らしい書き方」へ一歩進める方法を紹介します。
なぜ「Unity っぽくない」のか?
Unity では、基本的に次のように考えます。
- すでにシーン上にオブジェクトが存在している
- それにスクリプトが付いている
- オブジェクト同士を「つなぐ」
つまり、
自分で new するより、既にあるものを使う
という世界です。
今日のゴール
次の構成を作ります。
- Player(プレイヤー)
- Enemy(敵)
そして、
- Player が攻撃する
- Enemy がダメージを受ける
という流れを、Unity のオブジェクト同士で実現します。
Player スクリプト
using UnityEngine;
public class Player : MonoBehaviour
{
private int hp = 100;
private int power = 50;
// Inspector で設定する
public Enemy enemy;
void Start()
{
Attack();
enemy.Damage(power);
}
public void Attack()
{
Debug.Log("プレイヤーが攻撃!");
}
public void Damage(int damage)
{
hp -= damage;
Debug.Log("プレイヤーは " + damage + " ダメージを受けた");
}
}
Enemy スクリプト
using UnityEngine;
public class Enemy : MonoBehaviour
{
private int hp = 80;
public void Damage(int damage)
{
hp -= damage;
Debug.Log("敵は " + damage + " ダメージを受けた");
if (hp <= 0)
{
Debug.Log("敵を倒した!");
}
}
}
Unity 側の設定手順(ここが一番重要)
① オブジェクトを作成
- Hierarchy で右クリック → Create Empty(名前を
PlayerとEnemyにする)
② スクリプトをアタッチ
Playerオブジェクト →Player.csEnemyオブジェクト →Enemy.cs
③ 参照をつなぐ
Playerを選択- Inspector の Enemy 欄に、
Enemyオブジェクトをドラッグして代入
プログラムの流れ
Play 開始
↓
Start() が実行される
↓
Attack() … ログ出力
↓
enemy.Damage(power) … Inspector でつないだ Enemy の HP が減る
ここが一番大事な理解ポイント
今回の変更で何が起きているかというと、次の対比です。
| 考え方 | 内容 |
|---|---|
| Before(C# 中心) | Player myPlayer = new Player(); → 自分で作る |
| After(Unity) | すでにあるものを使う → Inspector でつなぐ |
よくある誤解(ここは必ず伝えたい)
「Unity では new を使わないの?」
→ 使います。
ただし、まずは次の感覚で十分です。
- GameObject や MonoBehaviour の“シーン上の役割” … 基本は
newしない(シーンと Inspector で用意する) - リスト、構造体、データ用のクラス …
newしてよい
少しだけゲームっぽくする(発展)
スペースキーが押されたときだけ攻撃する例です。
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Attack();
enemy.Damage(power);
}
}
補足: 本シリーズの 入力の取得 では Input System を使います。ここでは「Update でキーを検知する」イメージのため、レガシー入力の例にしています。
この教材の狙い
このサンプルは単なる攻撃処理ではありません。次の理解につながります。
- クラス … 設計図
- GameObject … シーン上の実体
- public 変数(参照) … 他コンポーネントとの接続ポイント
講師視点の補足
この段階で重要なのは、
- 完璧な理解ではない
- 「違いを体験すること」
です。
WinForms では 自分で仕組みを作る 側面が強い一方、Unity では すでにある仕組みの上で作る ことが多いです。この違いを、コードの説明だけでなく体験でつかんでもらうのがポイントです。
次のステップ
- public や SerializeField をさらに使いこなす … 変数と Inspector での編集
- 実行時にオブジェクトを生成する … プレハブと生成(
Instantiateとの違いはここで整理できます) - 参照の取り方のバリエーション(
Find/GetComponentの使いどころなど)は、別記事や発展課題で扱えます。
まとめ
Unity で C# を学ぶときは、
- 最初は「
new」で理解してよい - 次に「つなぐ世界」に移行する
この順番がとても大切です。



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