WinForms経験者がUnityでつまずく理由【究極版】

広告

C#を学び、WinFormsでアプリを作れるようになったあとにUnityに入ると、

多くの人がこう感じます。

「文法は分かるのに、何をしているのか分からない」

これは能力の問題ではありません。

「実行モデル(時間の扱い)」が違う

これが原因です。


前提:両者は同じ仕組みを持っている

まず重要な事実です。

・オブジェクト
・イベント
・状態

どちらもこの3つで構成されています。

つまり

「できること」はほぼ同じ

です。


決定的な違い:実行モデル(時間の流れ)

ここだけが本質です。


■ WinForms

・基本は待機している
・イベントが来たときだけ処理が動く

■ イメージ

止まっている
↓
クリック
↓
動く
↓
また止まる

■ Unity

・常に時間が進み続けている
・毎フレーム処理が呼ばれる

■ イメージ

ずっと動いている
↓
その中で処理を書く

■ まとめ

WinForms:イベント時だけ動く
Unity:常に動き続ける

この違いがすべてにつながる


■ なぜ Update があるのか

void Update()
{
}

→ 毎フレーム呼ばれる前提だから


■ なぜ Time.deltaTime があるのか

→ フレームごとに時間が違うから


■ なぜ Rigidbody があるのか

→ 物理が継続して計算されているから


WinFormsでも同じことはできる

重要な補足です。

timer.Tick += Update;

→ WinFormsでもゲームのような処理は作れます


しかし違いはここです:

WinForms:必要ならループを作る
Unity:ループが最初から存在する

設計が変わる理由

この違いにより、設計も変わります。


■ WinForms

入力 → 処理 → 出力
(単発処理)

■ Unity

状態を持つ
↓
毎フレーム更新
↓
状態が変化し続ける

■ 重要

Unityは「処理」ではなく「状態」を扱う

よくある混乱


■ ① Updateを書かない

→ 動かない


■ ② 状態を持たない

→ 挙動が作れない


■ ③ 1回で終わる処理を書く

→ Unityに合っていない


正しい入り方


■ ① まず動かす

void Update()
{
    transform.position += new Vector3(1f * Time.deltaTime, 0, 0);
}

■ ② 状態を持つ

float speed = 3f;

■ ③ 継続的に変化させる


今の皆さんへのメッセージ

皆さんはすでに

  • 変数
  • 条件分岐
  • ループ
  • クラス

を使えます。

つまり

「書く力」はあります

Unityで新しく学ぶもの

「時間が流れ続ける前提で書くこと」

これだけです。


最後に

Unityが難しいのは

新しい技術だからではありません

「止まっている世界」ではなく
「動き続ける世界」を扱うからです

WinForms:止まっている中でイベントが起きる

Unity:動き続ける中で状態を変える

この違いを理解した瞬間、

Unityは一気に分かるようになります。


訪問数 5 回, 今日の訪問数 5回

広告

Unity

Posted by hidepon