第3回まで無料

Unity ゲーム開発入門コース

環境構築から、Transform と MonoBehaviour・Rigidbody と WheelCollider・エンジンとトランスミッション・タイヤのグリップとステアリング・Cinemachine と HUD・Spline による道路生成・URP の夜景・AI ライバル車・最適化・Steam 公開まで。全50レッスンで「首都高風の夜間レースゲームを 1 本作りきり、Steam のストアページから配れる」ところまで進みます。コードと数値はすべて Unity 6 LTS(6000.3系)+ URP の構成で書いたものです。

カリキュラム

全50レッスンを7つの章に分けています。第1章から順に進めるのがおすすめですが、 気になるところだけ拾い読みしてもかまいません。 ※ ブラウザ内で実行できないため、Unity 6 LTS(6000.3系)で Universal 3D(URP)のプロジェクトを作り、そこにスクリプトを置いて試してください。

Chapter 1 — Unity の基礎(第1〜9回)

Unity を入れてプロジェクトを作り、エディタの 4 つのウィンドウが何を表しているかを押さえます。Transform・MonoBehaviour・SerializeField・Time.deltaTime・Input System・Prefab・Rigidbody まで、以降の 41 回で毎回使う道具をここで一通り触ります。

1

Unity とは何か(環境構築と最初のプロジェクト)

Unity Hub と Unity Editor の役割を分け、LTS と URP テンプレートで NightRunner プロジェクトを作る。ここから第50回まで同じ 1 つのプロジェクトを育てる。

Free
2

エディタの見方と GameObject・コンポーネント

Scene・Game・Hierarchy・Inspector・Project の役割を押さえ、テスト用シーンを作る。Unity は継承ではなく、GameObject にコンポーネントを足して機能を組む。

Free
3

Transform と 3D 空間(座標と回転)

左手座標系と Y-up、ローカルとワールドの違い、Space.Self と Space.World。回転は Quaternion で扱い、補間は Slerp と 1 - Exp(-k·dt) で書く。

Free
4

MonoBehaviour のライフサイクル

Awake・Start・FixedUpdate・Update・LateUpdate の呼ばれる順番と回数。入力は Update、物理は FixedUpdate、カメラは LateUpdate。

🔒 ベーシック
5

SerializeField と Inspector

コードの数値をエディタから調整できるようにする。SerializeField private が基本、public は使わない。AnimationCurve と OnValidate、そして Play 終了で値が戻る落とし穴。

🔒 ベーシック
6

Time.deltaTime とフレーム非依存の移動

deltaTime を掛けると単位が「/秒」になる。Lerp の追従係数には 1 - Exp(-k·dt) を使う。物理を FixedUpdate に書く本当の理由。

🔒 ベーシック
7

Input System で入力を受け取る

Action Map と 1D Axis コンポジットでキーボードとゲームパッドを 1 つの Action にまとめる。入力を 1 クラスに閉じ込め、車の物理はデバイスを知らない状態にする。

🔒 ベーシック
8

Prefab と Instantiate(生成と破棄)

Prefab はシーンの外に置かれた設計図。オーバーライドと Apply の影響範囲、Instantiate の書き方、そして頻繁に出し入れするものはオブジェクトプールで使い回す。

🔒 ベーシック
9

Rigidbody・Collider・物理の基本

Rigidbody を付けたら transform.position を直接代入しない。Interpolate と Collision Detection、Collider の選び方、そして車の要になる centerOfMass。

🔒 ベーシック

Chapter 2 — 車を走らせる(第10〜14回)

箱を動かす段階から、4 輪の車が自分の操作で走る段階へ進みます。FixedUpdate と AddForce、WheelCollider の仕組みを押さえたうえで、第12回で最小構成の車を組み上げ、見た目と転倒対策まで付けます。

Chapter 3 — 車両物理(第15〜21回)

「走る」から「クルマらしく走る」へ。エンジンのトルクカーブと RPM、ギア比とシフト、駆動方式とデフ、タイヤのグリップとスリップ、ブレーキ、ステアリング、そして空力までを順に足していきます。

15

エンジンをモデリングする(トルクカーブと RPM)

トルクは回転数で変わる。AnimationCurve でトルクカーブを描き、回転数・レブリミッター・エンジンブレーキを持つ Engine を、車から独立したクラスとして作る。

🔒 ベーシック
16

トランスミッション(ギア比・シフト・オートマ)

ギア比でトルクを増幅し、回転数を落とす。回転数は割る、トルクは掛ける。シフト中はクラッチを切って駆動を抜く。

🔒 ベーシック
17

ドライブトレイン(FR・FF・AWD)とデフ

デフは左右の回転差を許す装置。オープンデフは抵抗の小さい側にトルクが流れる。LSD はオープン配分と均等配分の補間で作れる。

🔒 ベーシック
18

タイヤのグリップとスリップ(Friction Curve)

Asymptote Value が滑ってからのグリップを決める。荷重感応・路面・摩擦円を毎ステップ Friction Curve に書き戻して、静的な設定では出せない挙動を作る。

🔒 ベーシック
19

ブレーキ・ハンドブレーキ・簡易 ABS

ブレーキは前寄り配分。ロックすると横グリップが 0 になって曲がれない。ABS は握る・緩めるの繰り返しで、ハンドブレーキには効かせない。

🔒 ベーシック
20

ステアリング(アッカーマン・速度感応・カウンター)

内輪を外輪より大きく切るアッカーマン、高速で舵角を絞る速度感応、そして操作を奪わないカウンターステア補助。第12回の 5 つの問題がここで全部片付く。

🔒 ベーシック
21

ダウンフォースと空気抵抗

空気抵抗は速度の 2 乗に比例する。だから最高速に上限が生まれる。ダウンフォースは車体の下向きに加え、荷重感応を通してグリップを上げる。

🔒 ベーシック

Chapter 4 — 運転の手触り(第22〜30回)

物理が正しくても気持ちよくはなりません。ScriptableObject でセッティングを外に出し、カメラ・エンジン音・HUD・スモーク・ドリフト判定・ダメージ・ゲームパッド対応を重ねます。最後はリプレイとゴースト走行を作ります。

22

車両データを ScriptableObject で管理する

50 項目以上に増えたセッティングを 1 つのアセットに集める。Play 終了で値が消えない。実行時コピーでアセットを汚さず、DefaultExecutionOrder で初期化順を保証する。

🔒 ベーシック
23

Cinemachine でチェイスカメラを作る

カメラを動かすのではなく、優先度で切り替える。追うのは物理の車体で、演出で傾く見た目ではない。FOV の変化が速さの体感を作る。

🔒 ベーシック
24

エンジンサウンド(ピッチ制御とレイヤー合成)

1 つのループ音のピッチ変更では足りない。低/高回転 × アクセル ON/OFF の 4 レイヤーをクロスフェードする。音源の権利は最初から確認する。

🔒 ベーシック
25

HUD を作る(速度計・タコメーター・ギア表示)

Canvas Scaler とアンカーを最初に設定する。計器はわざと遅らせるとアナログらしくなる。HUD は物理を知らず、公開プロパティを読むだけ。

🔒 ベーシック
26

タイヤスモーク・スキッドマーク・排気エフェクト

Particle System の Simulation Space は World。スキッドマークは動的メッシュ 1 枚に全ホイールぶんを詰めてドローコールを 1 にする。

🔒 ベーシック
27

ドリフト判定とスコア

「滑っている」だけでは判定にならない。低速の据え切り・スピン・ジャンプ中を弾き、猶予時間で切り返しを繋ぐ。破綻寸前を最高得点にしない。

🔒 ベーシック
28

衝突とダメージ表現

relativeVelocity で強さを 3 段階に分ける。timeScale を変えたら fixedDeltaTime も合わせる。明示的に速度を落とさないと、壁を使うのが最適戦略になる。

🔒 ベーシック
29

ゲームパッドとハンドルコントローラ対応

Binding を足すだけでデバイス対応が済む。車の物理コードは 1 行も変わらない。デバイスによって補正を変え、振動を止め忘れない。

🔒 ベーシック
30

【実践】リプレイとゴースト走行

入力記録は決定論が必要で壊れやすい。状態記録を 20Hz で取り、補間して再生する。ゴーストは物理を持たず、壊れたファイルでゲームを落とさない。

🔒 ベーシック

Chapter 5 — コースと夜景(第31〜36回)

走る場所を作ります。Spline から首都高風の道路メッシュを生成し、ガードレールと路面マテリアルを付け、URP のライティングと Post Processing で夜の高速道路に仕上げます。最後にチェックポイントとラップ計測を入れます。

31

Spline で首都高風の道路を生成する

Spline から道路メッシュを起こす最大の利点は、コースの情報をコードから取れること。曲率からバンクを自動計算し、断面を並べてメッシュを張る。

🔒 ベーシック
32

道路メッシュ・ガードレール・路面マテリアル

連続するものはメッシュ生成、離散的なものは Prefab 配置。左右で頂点順を反転させないと片側が透ける。街灯 35m 間隔の明暗のリズムが夜らしさを作る。

🔒 ベーシック
33

URP で夜景を作る(ライティングと Emissive)

夜景は「暗くする」のではなく「明かりを置く」。Emissive は光源ではないがコストがほぼ 0。リアルタイムライトは高いので数を抑える。

🔒 ベーシック
34

Post Processing で“速さ”を演出する

Emissive + Bloom + Tonemapping + HDR の 4 つが揃って初めて光る。Motion Blur は 0.3 以下。画面酔い対策は Steam のレビューに直結する。

🔒 ベーシック
35

ヘッドライト・テールランプとライト最適化

ロービームは広く近く、ハイビームは狭く遠く。影は落とさない。MaterialPropertyBlock でマテリアルを複製せずに色を変え、街灯は距離でカリングする。

🔒 ベーシック
36

チェックポイント・ラップ計測・リザルト

「順番どおりに全部通ったらラップ成立」の 1 ルールで、ショートカットと逆走を同時に弾く。トリガーの厚みは 4m。逆走判定は内積で。

🔒 ベーシック

Chapter 6 — ゲームとして仕上げる(第37〜44回)

走れるだけの状態を、遊べるゲームにします。AI ライバル車と一般車トラフィック、タイトルからリザルトまでのシーンフロー、セーブとチューニング。後半はプロファイラで重い場所を特定し、描画・物理・スクリプトを最適化してオプション画面を付けます。

37

AI ライバル車(スプライン追従+操舵制御)

AI は車を動かすのではなく入力を作る。コーナー速度は v = √(a·r) で物理から求め、手前から減速する。完璧に走る AI は面白くない。

🔒 ベーシック
38

一般車トラフィック AI と車線変更

トラフィック車は物理を使わない。Kinematic Rigidbody で Spline を流し、離れた車を反対側へ巻き戻す。交通量が最も効果的な難易度パラメータ。

🔒 ベーシック
39

シーン管理とゲームフロー

Boot シーンパターンで GameFlow を 1 つだけ置く。LoadSceneAsync の progress は 0.9 で止まる。シーンをまたぐデータは GameFlow が持つ。

🔒 ベーシック
40

セーブデータとチューニング/車両購入システム

「何を持っているか」を保存し、性能は毎回計算する。一時ファイル経由で書いてデータを失わない。トレードオフのあるチューニングが選択を生む。

🔒 ベーシック
41

プロファイラで重い場所を特定する

推測せず測る。60fps の予算は 16.7ms。Self の大きいものが真犯人で、GC Alloc がスパイクを生む。エディタとビルドは違う。

🔒 ベーシック
42

描画の最適化(LOD・GPU Instancing・オクルージョン)

SetPass Calls を減らすのが最優先。効果の大きい順に SRP Batcher → Static Batching → Far Clip → シャドウ。頂点数より SetPass。

🔒 ベーシック
43

物理とスクリプトの最適化

GC Alloc の最大の原因は文字列。値が変わったときだけ更新する。文字列比較を Dictionary に置き換え、タイムスライシングで 1 フレームの山を潰す。

🔒 ベーシック
44

オプション画面・キーコンフィグ・ローカライズ

音量は dB に変換する。Input System のリバインド API は数行で済む。キーコンフィグと酔い対策が無いと、それだけで低評価が付く。

🔒 ベーシック

Chapter 7 — ビルドと Steam 公開(第45〜50回)

作ったものを他人が遊べる形にします。Windows 向けビルドの落とし穴、Steamworks への登録と審査、Steamworks.NET による実績・リーダーボード・Steam Cloud、steamcmd でのアップロード。最後はリリースとその後の運用でシリーズを閉じます。

45

Windows 向けビルドとトラブルシュート

Company Name はセーブの保存先になる。製品版は IL2CPP。エディタでは動くのにビルドで落ちる 5 つの原因を、ここでまとめて回収する。

🔒 ベーシック
46

Steamworks に登録する(Steam ダイレクトと審査)

税務情報が最初の関門。AppID は以降すべての作業で使う。ストアページ公開から最低 30 日はリリースできない。「雰囲気の再現」は自由、「固有の表現を借りる」のが問題。

🔒 ベーシック
47

Steamworks.NET の組み込みと Steam 実績

Steam が無くてもゲームは動く。StoreStats を忘れると反映されない。ゲームのシステムに Steam を持ち込まず、1 つのクラスだけが両者を繋ぐ。

🔒 ベーシック
48

リーダーボードと Steam Cloud

CallResult をフィールドに保持しないと結果が返らず、エラーも出ない。KeepBest でタイムを送る。ランキングの公平性は技術ではなく設計の問題。

🔒 ベーシック
49

ストアページ・デポ・steamcmd でビルドをアップロード

カプセル画像が最重要。setlive は空文字にする。steam_appid.txt を絶対に含めない。beta ブランチで必ず動作確認してから default に。

🔒 ベーシック
50

リリースとその後(Next Fest・アップデート・総まとめ)

Next Fest は 1 回だけ。ウィッシュリストが初動を決める。レビューは最初の 10 件が重要。個人開発で最も難しいのは、完成させること。

🔒 ベーシック

全50レッスンを終えたら、次は車やコースのモデルを自分で用意できるようになる Blender Python 入門コース や、AI とスコア計算の土台を鍛える アルゴリズム基礎 入門コース へ。メンバーシップで全コースが解放されます。