IT初心者のための100日Unityマスターロードマップ
対象:PCの基本操作はできるが、プログラミング・Unity経験ゼロの方 目標:100日後に自分でオリジナルゲームを1本完成させて公開できる状態になる 1日の学習目安:平日30〜60分、休日1〜2時間
AIメンターと進める: AIメンター用プロンプト(100日Unityチャレンジ) を生成AIのカスタム指示に貼ると、このロードマップの Day/Phase に沿って伴走しやすくなります。
ロードマップ全体像
Phase 0 ▶ Phase 1 ▶ Phase 2 ▶ Phase 3 ▶ Phase 4 ▶ Phase 5
Day 1-7 Day 8-25 Day 26-45 Day 46-63 Day 64-84 Day 85-100
環境構築 基礎 2Dゲーム 物理・演出 3Dゲーム 完成・公開
↓ ↓ ↓ ↓ ↓ ↓
Unityを C#の書き方 矢よけゲーム ジャンプ いがぐり 自作ゲーム
インストール マウス入力 を作る ゲームを作る ゲームを作る を世界へPhase 0:環境構築と心構え(Day 1〜7)
目標:Unityが起動して「Hello, Unity!」と画面に表示できる状態になる
Day 1|Unityとは何かを知る
やること
- Unity公式サイト(unity.com)でUnityがどんなゲームエンジンかを調べる
- YouTubeで「Unity 入門」と検索し、雰囲気をつかむ(視聴だけでOK)
- Unity Hub(Unityの管理ツール)をダウンロードする
ポイント Unity は「ゲームを作るための統合開発環境」です。世界中のゲーム会社が使っており、モバイル・PC・コンソールに対応しています。無料プランで個人開発は十分まかなえます。
Day 2|Unity Hub とエディターをインストールする
やること
- Unity Hub を起動し、Unity ID(無料アカウント)を作成する
- Unity Hub から Unity 6 をインストールする(LTS版を選ぶ)
- インストール時に「Android Build Support」「WebGL Build Support」にチェックを入れる
注意点 インストールには30分〜1時間かかる場合があります。容量は15GB程度必要です。
Day 3|はじめてのプロジェクトを作る
やること
- Unity Hub で「新しいプロジェクト」→「2D」を選んで作成する
- Unity エディターが起動することを確認する
- 画面の各パネル(Scene / Game / Hierarchy / Inspector / Project)の名前と役割を覚える
エディターの画面構成
| パネル | 役割 |
|---|---|
| Scene | ゲームオブジェクトを配置する作業スペース |
| Game | 実際にゲームを動かしたときの見え方のプレビュー |
| Hierarchy | シーン内のオブジェクト一覧(ツリー表示) |
| Inspector | 選択中のオブジェクトの設定・コンポーネント |
| Project | Assetsフォルダの中身(画像・スクリプトなど) |
Day 4|GameObjectを配置してみる
やること
- Hierarchy で「+」→「2D Object」→「Sprite」を追加する
- Inspector でスプライトの色・サイズを変えてみる
- 再生ボタン(▶)を押してGame画面を確認する
Day 5|C#スクリプトをはじめて書く
やること
- Project パネルで右クリック→「Create」→「C# Script」を作成する
- スクリプトをGameObjectにドラッグしてアタッチする
Start()の中にDebug.Log("Hello, Unity!");と書いて実行する- Console パネルに「Hello, Unity!」が出ることを確認する
using UnityEngine;
public class HelloUnity : MonoBehaviour
{
void Start()
{
Debug.Log("Hello, Unity!");
}
}Day 6〜7|環境に慣れる・復習
やること
- Day 1〜5 で迷った操作をもう一度やり直す
- Unity の「保存」は
Ctrl+S(Sceneを保存)と覚える - プロジェクトをバックアップする習慣をつける(フォルダをコピーしておくだけでもOK)
チェックリスト
- Unity Hub と Unity 6 がインストールできた
- 新しいプロジェクトを作成できた
- 5つのパネルの名前と役割がわかる
- C# スクリプトを作ってアタッチできた
-
Debug.Log()の出力が Console に表示された
Phase 1:UnityとC#の基礎(Day 8〜25)
目標:ルーレットとスワイプカーの2つのゲームを自力で再現できる 📖 対応ブログ記事:Chapter 3 Rouletteゲーム入門 / Chapter 4 SwipeCarゲーム入門
Day 8〜10|C#の基本文法を覚える
やること
- 変数(
int・float・string・bool)の宣言と代入 if文・else文で条件分岐を書く- コメント(
//)の書き方を覚える
// 変数の例
int score = 0; // 整数
float speed = 1.5f; // 小数(末尾にf)
string name = "Player"; // 文字列
bool isAlive = true; // 真偽値
// 条件分岐の例
if (score > 100)
{
Debug.Log("ハイスコア!");
}
else
{
Debug.Log("まだまだ!");
}Day 11〜12|Start() と Update() の違いを理解する
やること
Start()は「ゲーム開始時に1度だけ」実行されることを確認するUpdate()は「毎フレーム(1秒間に60回)」実行されることを確認するDebug.Log()で両方のタイミングを実際に確かめる
void Start()
{
Debug.Log("ゲーム開始!(1回だけ表示される)");
}
void Update()
{
Debug.Log("毎フレーム実行中..."); // 大量に出力されるので注意
}Day 13〜14|transform.Rotate() でオブジェクトを回転させる
やること
transform.Rotate(0, 0, 3)でオブジェクトを回転させる- 回転速度を変数で管理する
- マウスクリック(
Mouse.current.leftButton.wasPressedThisFrame)で回転スピードを変える
📖 ブログ記事でポイントを確認:Chapter 3 Rouletteゲーム入門 → ポイント⑥
Day 15〜17|Rouletteゲームを完成させる
やること
- ルーレットの画像(円形のスプライト)を用意してシーンに配置する
RouletteController.csを作成し、回転と減速のコードを書く- クリックで回転が始まり、だんだん止まることを確認する
目標コード(骨格)
using UnityEngine;
using UnityEngine.InputSystem;
public class RouletteController : MonoBehaviour
{
float speed = 0;
void Update()
{
// クリックで回転開始
if (Mouse.current.leftButton.wasPressedThisFrame)
{
speed = 10.0f;
}
transform.Rotate(0, 0, speed);
speed *= 0.98f; // だんだん遅くなる
}
}📖 完成コードはブログで確認:Chapter 3 Rouletteゲーム入門
Day 18〜19|Vector2 とスワイプ検出を学ぶ
やること
Vector2(X・Yの2値を持つ型)を理解する- マウスを押した座標・離した座標を記録して差を計算する
swipeLength = endPos.x - startPos.xでスワイプ量を求める
📖 ブログ記事でポイントを確認:Chapter 4 SwipeCarゲーム入門 → ポイント①②③
Day 20〜22|GameObject.Find() と TextMeshProUGUI を使う
やること
GameObject.Find("オブジェクト名")で他のオブジェクトを参照するGetComponent<TextMeshProUGUI>().textでリアルタイムにテキストを更新する- 距離をテキストで表示するUIを作る
Day 23〜25|SwipeCarゲームを完成させる
やること
- 車・フラグ・テキストをシーンに配置する
CarController.cs(スワイプで車を動かす)とGameDirector.cs(距離を表示する)を作成する- スワイプ → 車が動く → テキストが距離を表示する流れを確認する
📖 完成コードはブログで確認:Chapter 4 SwipeCarゲーム入門
Phase 1 チェックリスト
- 変数・
if文・コメントが書ける -
Start()とUpdate()の違いがわかる -
transform.Rotate()でオブジェクトを回転できる - マウス入力(押した瞬間・離した瞬間)を検知できる
-
Vector2でスワイプ量を計算できる -
GameObject.Find()+GetComponent<>()で別オブジェクトを操作できる - Rouletteゲームを自力で作れた
- SwipeCarゲームを自力で作れた
Phase 2:2Dゲーム開発(Day 26〜45)
目標:矢よけゲーム(CatEscape)を作り、プレハブ・衝突判定・UIゲージを使いこなせる 📖 対応ブログ記事:Chapter 5 CatEscapeゲーム入門
Day 26〜27|キーボード入力とフレームレート固定
やること
Keyboard.current.leftArrowKey.wasPressedThisFrameでキー入力を検知するApplication.targetFrameRate = 60でフレームレートを60FPSに固定する- プレイヤーキャラクターが矢印キーで左右に動くことを確認する
Day 28〜30|Time.deltaTime でフレームレートに依存しない処理を書く
やること
Time.deltaTimeが「前フレームからの経過秒数」であることを理解するdelta += Time.deltaTimeで経過時間を積算する- 「1秒ごとに何かを実行する」タイマーを自力で実装する
float span = 1.0f;
float delta = 0;
void Update()
{
delta += Time.deltaTime;
if (delta > span)
{
delta = 0;
Debug.Log("1秒経過!");
}
}Day 31〜33|プレハブと Instantiate() でオブジェクトを量産する
やること
- プレハブ(ゲームオブジェクトの設計図)の概念を理解する
Instantiate(prefab)でオブジェクトをコピー生成するRandom.Range(-6, 7)でランダムな位置に配置する
public GameObject arrowPrefab;
void SpawnArrow()
{
GameObject arrow = Instantiate(arrowPrefab);
int px = Random.Range(-6, 7);
arrow.transform.position = new Vector3(px, 7, 0);
}Day 34〜35|Destroy() でオブジェクトを削除する
やること
- 画面外に出たオブジェクトを
Destroy(gameObject)で削除する InstantiateとDestroyをセットで使う「生成→削除」パターンを覚える
Day 36〜38|円と円の距離で当たり判定を実装する
やること
- 2つのオブジェクトの座標から距離を計算する(
Vector2.magnitude) - 距離 < 半径の合計 で「当たった」と判定する
- 当たったら矢を消す処理を追加する
Vector2 dir = p1 - p2;
float d = dir.magnitude;
if (d < r1 + r2)
{
// 衝突!
Destroy(gameObject);
}Day 39〜40|Image.fillAmount でHPゲージを作る
やること
- UnityのUI「Image」コンポーネントの
Image TypeをFilledに設定する fillAmountを 0.0〜1.0 で操作してゲージの増減を表現する
Day 41〜42|スクリプト間の連携(GetComponent + public メソッド)
やること
public void DecreaseHp()のようにpublicメソッドを定義する- 別スクリプトから
GetComponent<GameDirector>().DecreaseHp()を呼び出す
Day 43〜45|CatEscapeゲームを完成させる
やること
- プレイヤー・矢・HPゲージをシーンに配置する
- 4つのスクリプト(PlayerController / ArrowGenerator / ArrowController / GameDirector)を作成する
- キーで動く → 矢が降る → 当たるとHPが減る流れを確認する
📖 完成コードはブログで確認:Chapter 5 CatEscapeゲーム入門
Phase 2 チェックリスト
- キーボード入力でキャラクターを動かせる
-
Time.deltaTimeで1秒タイマーを実装できる - プレハブから
Instantiate()でオブジェクトを量産できる -
Destroy()で不要なオブジェクトを削除できる - 距離計算で当たり判定を実装できる
-
Image.fillAmountでHPゲージを作れる - スクリプト間で
publicメソッドを呼び出せる - CatEscapeゲームを自力で作れた
Phase 3:物理演算・アニメーション・シーン管理(Day 46〜63)
目標:ClimbCloudゲームを作り、物理演算・スプライトアニメーション・シーン切り替えをマスターする 📖 対応ブログ記事:Chapter 6 ClimbCloudゲーム入門
Day 46〜48|Rigidbody2D で物理演算を使う
やること
- GameObjectに
Rigidbody2Dコンポーネントをアタッチする GetComponent<Rigidbody2D>()でスクリプトから参照する- 何もしなくても重力で落下することを確認する
Day 49〜51|AddForce() で力を加えてジャンプ・歩行を実現する
やること
AddForce(transform.up * 600)で上方向にジャンプする力を加えるAddForce(transform.right * 30)で右方向に歩く力を加えるlinearVelocityY == 0チェックで二段ジャンプを防ぐ
// ジャンプ(地面にいるときだけ)
if (Mouse.current.leftButton.wasPressedThisFrame
&& rigid2D.linearVelocityY == 0)
{
rigid2D.AddForce(transform.up * 600);
}
// 自動歩行(最大速度まで)
if (rigid2D.linearVelocityX < 2.0f)
{
rigid2D.AddForce(transform.right * 30);
}Day 52〜54|スプライト配列で2枚アニメーションを作る
やること
public Sprite[] walkSpritesでスプライト配列をInspectorから設定する1 - idxで 0 と 1 を交互に切り替えるトグルテクニックを使う- Y速度が0でないとき(空中)は別の画像を表示する
// 0.1秒ごとに歩きスプライトを切り替える
time += Time.deltaTime;
if (time > 0.1f)
{
time = 0;
spriteRenderer.sprite = walkSprites[idx];
idx = 1 - idx; // 0→1→0→1...と交互に
}Day 55〜57|SceneManager.LoadScene() でシーンを切り替える
やること
using UnityEngine.SceneManagement;を追加する- 別シーン(ClearScene)を作成して Build Settings に追加する
- プレイヤーが落下したとき・ゴールに触れたときにシーンを切り替える
Day 58〜59|OnTriggerEnter2D() でゴール判定をする
やること
- ColliderのInspectorで「Is Trigger」にチェックを入れる
OnTriggerEnter2Dメソッドをスクリプトに追加する- ゴールに触れたらクリアシーンに遷移する
Day 60〜61|public フィールドとInspector設定
やること
- フィールドを
publicにするとInspectorで値を設定できることを確認する - スプライトや数値をInspectorから変更して動作が変わることを試す
Day 62〜63|ClimbCloudゲームを完成させる
やること
- 猫・雲の足場・ゴールをシーンに配置する
PlayerController.csを作成し、ジャンプ・歩行・アニメーション・シーン切り替えを実装する- ゲームシーン・クリアシーンの2画面が切り替わることを確認する
📖 完成コードはブログで確認:Chapter 6 ClimbCloudゲーム入門
Phase 3 チェックリスト
-
Rigidbody2Dをアタッチして重力落下を確認できた -
AddForce()でジャンプ・歩行を実装できた -
linearVelocityY == 0で二段ジャンプを防止できた - 2枚のスプライトを交互に切り替えてアニメーションできた
- 2つのシーンを作って
SceneManager.LoadScene()で切り替えられた -
OnTriggerEnter2Dでゴール判定を実装できた - ClimbCloudゲームを自力で作れた
Phase 4:3Dゲーム開発(Day 64〜84)
目標:3D空間でいがぐりを発射しリンゴをキャッチするゲームを作り、3D特有のテクニックをマスターする 📖 対応ブログ記事:Chapter 7 Igaguriゲーム入門 / Chapter 8 AppleCatchゲーム入門
Day 64〜65|2Dから3Dへの切り替え
やること
- 新しいプロジェクトを「3D」テンプレートで作成する
Rigidbody(3D版)とRigidbody2D(2D版)の違いを確認するVector3(X・Y・Z の3値)を使って3D空間を理解する
| 項目 | 2D | 3D |
|---|---|---|
| 物理コンポーネント | Rigidbody2D |
Rigidbody |
| 座標の型 | Vector2(X・Y) |
Vector3(X・Y・Z) |
| 衝突コールバック | OnCollisionEnter2D |
OnCollisionEnter |
| トリガーコールバック | OnTriggerEnter2D |
OnTriggerEnter |
Day 66〜68|Camera.main.ScreenPointToRay() で3D方向を取得する
やること
Ray ray = Camera.main.ScreenPointToRay(mousePos)でクリック方向の光線を作るray.directionにいがぐりを飛ばす力を掛けて発射する
Ray ray = Camera.main.ScreenPointToRay(Mouse.current.position.value);
igaguri.GetComponent<IgaguriController>().Shoot(ray.direction * 2000);📖 ブログ記事でポイントを確認:Chapter 7 Igaguriゲーム入門 → ポイント②
Day 69〜70|isKinematic と ParticleSystem を使う
やること
- 衝突時に
Rigidbody.isKinematic = trueで物理演算を止める GetComponent<ParticleSystem>().Play()でエフェクトを再生する
Day 71〜73|Igaguriゲームを完成させる
やること
- Tanksサンプルアセットをインポートして的を配置する
IgaguriGenerator.cs(クリックで生成・発射)とIgaguriController.cs(衝突でエフェクト)を作る- クリックした方向にいがぐりが飛んで的に当たることを確認する
📖 完成コードはブログで確認:Chapter 7 Igaguriゲーム入門
Day 74〜75|Physics.Raycast() でクリック位置の3D座標を取得する
やること
Physics.Raycast(ray, out hit)でクリックした場所の3D座標を取得するMathf.RoundToInt()でグリッドにスナップする
RaycastHit hit;
if (Physics.Raycast(ray, out hit, Mathf.Infinity))
{
float x = Mathf.RoundToInt(hit.point.x);
float z = Mathf.RoundToInt(hit.point.z);
transform.position = new Vector3(x, 0, z);
}Day 76〜77|tag で種類を判別し、AudioSource で効果音を再生する
やること
- Inspector で GameObjectに「Apple」「Bomb」のタグを設定する
gameObject.tag == "Apple"で種類を判別するAudioSource.PlayOneShot(clip)で効果音を再生する
Day 78〜80|SetParameter() で動的に難易度を変える
やること
- タイマーで残り時間をカウントダウンする(
time -= Time.deltaTime) - 残り時間に応じて生成間隔・速度・ボム率を変える
SetParameter()メソッドで外部からパラメータを一括更新する
Day 81〜82|確率でアイテムを出し分ける
やること
Random.Range(1, 11)でサイコロ(1〜10)を振るratioとの比較で出現確率を制御する
Day 83〜84|AppleCatchゲームを完成させる
やること
- バスケット・リンゴ・ボムをシーンに配置する
- 4つのスクリプト(BasketController / GameDirector / ItemController / ItemGenerator)を作る
- クリックでバスケット移動 → タグ判定 → スコアとタイマー表示の流れを確認する
📖 完成コードはブログで確認:Chapter 8 AppleCatchゲーム入門
Phase 4 チェックリスト
-
Rigidbody(3D)で物理演算を使えた -
ScreenPointToRay()でクリック方向を3D光線に変換できた -
Physics.Raycast()でクリック位置の3D座標を取得できた - タグで種類を判別し効果音を再生できた
- タイマーで難易度を動的に変化させられた
- Igaguriゲームを自力で作れた
- AppleCatchゲームを自力で作れた
Phase 5:自作ゲームの完成と公開(Day 85〜100)
目標:自分でオリジナルゲームを1本完成させ、WebGLで公開する
Day 85〜87|オリジナルゲームのアイデアを決める
やること
- Phase 1〜4 で学んだ要素をベースにしたシンプルなゲームを1つ決める
- 「1週間で完成できる規模か?」を意識して絞る
アイデアの絞り込み基準
| 質問 | 良い例 | 避けるべき例 |
|---|---|---|
| スクリプトは何個必要? | 2〜4個 | 10個以上 |
| 操作方法は? | クリック・キー1〜2種 | 複雑なコンボ入力 |
| シーンは何画面? | 2〜3画面 | 10画面以上 |
| 既存ゲームに似ている? | はい(参考にできる) | 全く新しいもの |
Day 88〜92|オリジナルゲームのコアを実装する
やること
- まず「ゲームとして動く最小限のバージョン(プロトタイプ)」を作る
- 動くことを確認したら、細かい調整を加える
- エラーが出たら
Debug.Log()で変数の値を確認しながらデバッグする
実装の優先順位
① コアルール(動く・当たる・スコアが入る)← まずここだけ
② ゲームオーバー・クリア条件
③ UIテキスト・ゲージ
④ 効果音・演出
⑤ タイトル画面・リトライ機能 ← 余裕があればDay 93〜95|仕上げとバランス調整
やること
- 数値(速度・スポーン間隔・スコアなど)をテストプレイして調整する
publicフィールドを使うとInspectorから数値を変えやすい- 友人や家族に試しにプレイしてもらってフィードバックをもらう
Day 96〜97|WebGLでビルドしてブラウザで動かす
やること
File→Build Settingsを開く- プラットフォームを「WebGL」に切り替えて「Switch Platform」をクリックする
- 「Build」を押してフォルダを指定する(5〜15分かかる)
- 生成されたフォルダをローカルのWebサーバーで確認する
注意点
WebGLビルドはローカルで直接開くと動かないことがあります。python -m http.server などで簡易サーバーを立てると確認できます。
Day 98〜99|itch.io で無料公開する
やること
- itch.io(無料ゲーム公開サービス)のアカウントを作成する
- 「Create new project」→「Kind: HTML」を選んでWebGLのzipをアップロードする
- ゲームのタイトル・説明文・サムネイル画像を設定して公開する
itch.io でゲームを公開する手順:
① サインアップ(無料)
② Dashboard → Create new project
③ Kind を「HTML」に設定
④ WebGL ビルドフォルダを zip 圧縮してアップロード
⑤ 「This file is playable in the browser」にチェック
⑥ Save & view page で公開を確認!Day 100|振り返りと次のステップ
やること
- 100日間の学習を振り返り、できるようになったことをリストアップする
- 公開したゲームのURLをSNSやポートフォリオに掲載する
- 次に学びたいテーマを3つ決める
100日後にできるようになっていること
- Unity のエディター操作が一通りできる
- C# でスクリプトを読み書きできる
- 2Dゲーム・3Dゲームの両方を作れる
- プレハブ・物理演算・衝突判定・UIを使いこなせる
- シーン切り替え・効果音・パーティクルを実装できる
- ゲームをWebGLでビルドして公開できる
次のステップ(101日目以降)
100日でUnityの基礎を固めたら、次はこれらのテーマに挑戦しましょう。
グラフィックス・見た目
- Shader Graph でオリジナルのシェーダーを作る
- Post Processing(グロー・被写界深度など)で映像表現を磨く
- Cinemachine でカメラワークを演出する
ゲームシステム
- ScriptableObject でゲームデータをエディターから管理する
- Unity Event でスクリプト間の依存を減らす設計を学ぶ
- SaveSystem でセーブ・ロード機能を実装する
より大きなゲームへ
- Animator Controller でキャラクターアニメーションを管理する
- NavMesh で敵AIに自動経路探索をさせる
- Addressables でアセットを効率的に管理する
公開・収益化
- Unity Gaming Services でリーダーボードを追加する
- Google AdMob でモバイルゲームに広告を組み込む
- Steam / App Store への申請手順を調べる
100日間の全体スケジュール一覧
| Phase | 期間 | Day | テーマ | 完成物 |
|---|---|---|---|---|
| 0 | 1週間 | 1〜7 | 環境構築 | Hello, Unity! |
| 1 | 2.5週間 | 8〜25 | C#基礎・マウス入力 | Roulette / SwipeCar |
| 2 | 2.5週間 | 26〜45 | 2Dゲーム開発 | CatEscape |
| 3 | 2.5週間 | 46〜63 | 物理・アニメ・シーン | ClimbCloud |
| 4 | 3週間 | 64〜84 | 3Dゲーム開発 | Igaguri / AppleCatch |
| 5 | 2.5週間 | 85〜100 | 自作ゲーム完成・公開 | オリジナルゲーム |
詰まったときの対処法
- エラーメッセージをGoogle翻訳にかけて読む — 英語でも怖くない
Debug.Log()で変数の値を出力して確認する — エラーの原因の9割はここでわかる- Unity公式マニュアルを引く — 日本語対応。コンポーネント名で検索する
- 該当するブログ記事を読み直す — 目次 から該当章に飛ぶ
- Unityフォーラム / teratail / Zenn で検索する — 同じ問題で詰まった先人の回答がある
最終更新:2026年4月