学習記事一覧 · Unity教科書_Unity6対応

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 とエディターをインストールする

やること

  1. Unity Hub を起動し、Unity ID(無料アカウント)を作成する
  2. Unity Hub から Unity 6 をインストールする(LTS版を選ぶ)
  3. インストール時に「Android Build Support」「WebGL Build Support」にチェックを入れる

注意点 インストールには30分〜1時間かかる場合があります。容量は15GB程度必要です。


Day 3|はじめてのプロジェクトを作る

やること

  1. Unity Hub で「新しいプロジェクト」→「2D」を選んで作成する
  2. Unity エディターが起動することを確認する
  3. 画面の各パネル(Scene / Game / Hierarchy / Inspector / Project)の名前と役割を覚える

エディターの画面構成

パネル 役割
Scene ゲームオブジェクトを配置する作業スペース
Game 実際にゲームを動かしたときの見え方のプレビュー
Hierarchy シーン内のオブジェクト一覧(ツリー表示)
Inspector 選択中のオブジェクトの設定・コンポーネント
Project Assetsフォルダの中身(画像・スクリプトなど)

Day 4|GameObjectを配置してみる

やること

  1. Hierarchy で「+」→「2D Object」→「Sprite」を追加する
  2. Inspector でスプライトの色・サイズを変えてみる
  3. 再生ボタン(▶)を押してGame画面を確認する

Day 5|C#スクリプトをはじめて書く

やること

  1. Project パネルで右クリック→「Create」→「C# Script」を作成する
  2. スクリプトをGameObjectにドラッグしてアタッチする
  3. Start() の中に Debug.Log("Hello, Unity!"); と書いて実行する
  4. 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#の基本文法を覚える

やること

  • 変数(intfloatstringbool)の宣言と代入
  • 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ゲームを完成させる

やること

  1. ルーレットの画像(円形のスプライト)を用意してシーンに配置する
  2. RouletteController.cs を作成し、回転と減速のコードを書く
  3. クリックで回転が始まり、だんだん止まることを確認する

目標コード(骨格)

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ゲームを完成させる

やること

  1. 車・フラグ・テキストをシーンに配置する
  2. CarController.cs(スワイプで車を動かす)と GameDirector.cs(距離を表示する)を作成する
  3. スワイプ → 車が動く → テキストが距離を表示する流れを確認する

📖 完成コードはブログで確認: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) で削除する
  • InstantiateDestroy をセットで使う「生成→削除」パターンを覚える

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 TypeFilled に設定する
  • fillAmount を 0.0〜1.0 で操作してゲージの増減を表現する

Day 41〜42|スクリプト間の連携(GetComponent + public メソッド)

やること

  • public void DecreaseHp() のように public メソッドを定義する
  • 別スクリプトから GetComponent<GameDirector>().DecreaseHp() を呼び出す

Day 43〜45|CatEscapeゲームを完成させる

やること

  1. プレイヤー・矢・HPゲージをシーンに配置する
  2. 4つのスクリプト(PlayerController / ArrowGenerator / ArrowController / GameDirector)を作成する
  3. キーで動く → 矢が降る → 当たると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ゲームを完成させる

やること

  1. 猫・雲の足場・ゴールをシーンに配置する
  2. PlayerController.cs を作成し、ジャンプ・歩行・アニメーション・シーン切り替えを実装する
  3. ゲームシーン・クリアシーンの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|isKinematicParticleSystem を使う

やること

  • 衝突時に Rigidbody.isKinematic = true で物理演算を止める
  • GetComponent<ParticleSystem>().Play() でエフェクトを再生する

Day 71〜73|Igaguriゲームを完成させる

やること

  1. Tanksサンプルアセットをインポートして的を配置する
  2. IgaguriGenerator.cs(クリックで生成・発射)と IgaguriController.cs(衝突でエフェクト)を作る
  3. クリックした方向にいがぐりが飛んで的に当たることを確認する

📖 完成コードはブログで確認: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ゲームを完成させる

やること

  1. バスケット・リンゴ・ボムをシーンに配置する
  2. 4つのスクリプト(BasketController / GameDirector / ItemController / ItemGenerator)を作る
  3. クリックでバスケット移動 → タグ判定 → スコアとタイマー表示の流れを確認する

📖 完成コードはブログで確認: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|オリジナルゲームのコアを実装する

やること

  1. まず「ゲームとして動く最小限のバージョン(プロトタイプ)」を作る
  2. 動くことを確認したら、細かい調整を加える
  3. エラーが出たら Debug.Log() で変数の値を確認しながらデバッグする

実装の優先順位

① コアルール(動く・当たる・スコアが入る)← まずここだけ
② ゲームオーバー・クリア条件
③ UIテキスト・ゲージ
④ 効果音・演出
⑤ タイトル画面・リトライ機能   ← 余裕があれば

Day 93〜95|仕上げとバランス調整

やること

  • 数値(速度・スポーン間隔・スコアなど)をテストプレイして調整する
  • public フィールドを使うとInspectorから数値を変えやすい
  • 友人や家族に試しにプレイしてもらってフィードバックをもらう

Day 96〜97|WebGLでビルドしてブラウザで動かす

やること

  1. FileBuild Settings を開く
  2. プラットフォームを「WebGL」に切り替えて「Switch Platform」をクリックする
  3. 「Build」を押してフォルダを指定する(5〜15分かかる)
  4. 生成されたフォルダをローカルのWebサーバーで確認する

注意点 WebGLビルドはローカルで直接開くと動かないことがあります。python -m http.server などで簡易サーバーを立てると確認できます。


Day 98〜99|itch.io で無料公開する

やること

  1. itch.io(無料ゲーム公開サービス)のアカウントを作成する
  2. 「Create new project」→「Kind: HTML」を選んでWebGLのzipをアップロードする
  3. ゲームのタイトル・説明文・サムネイル画像を設定して公開する
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 自作ゲーム完成・公開 オリジナルゲーム

詰まったときの対処法

  1. エラーメッセージをGoogle翻訳にかけて読む — 英語でも怖くない
  2. Debug.Log() で変数の値を出力して確認する — エラーの原因の9割はここでわかる
  3. Unity公式マニュアルを引く — 日本語対応。コンポーネント名で検索する
  4. 該当するブログ記事を読み直す目次 から該当章に飛ぶ
  5. Unityフォーラム / teratail / Zenn で検索する — 同じ問題で詰まった先人の回答がある

最終更新:2026年4月