「自分の世界を動かしたい」という初期衝動
私が初めてゲーム開発というものに触れたのは、小学生の頃でした。授業中にノートの端っこに描いた、ただの迷路。そこに消しゴムのカスを置いて、指で弾いてゴールを目指す。たったそれだけのことなのに、友人が「おもしろい!」と言ってくれた時のあの高揚感。あれが、全ての原点だったように思います。
大人になり、エンジニアとして働き始めてからも、その感覚はずっと残っていました。「自分の頭の中にある世界を、実際に画面の中で動かしてみたい」。そう思って、何度かプログラミングに挑戦しては、挫折を繰り返してきました。
黒い画面に並ぶ無機質な英数字。
意味不明なエラーメッセージの羅列。
そして、何時間かけてもピクリとも動かないキャラクター。
「あ、これ自分には無理なやつだ」
そう諦めかけた時、出会ったのがUnityでした。
衝撃でした。まるでレゴブロックを組み立てるように、ドラッグ&ドロップで世界が作られていく。「これなら、私にもできるかもしれない」。そう感じた瞬間のワクワクは、今でも忘れられません。
今、この画面を見ているあなたも、きっと同じような衝動を抱えているはずです。「ゲームを作ってみたい」。その純粋で熱い想いは、何にも代えがたい才能です。
正直に言いますが、Unityは魔法のツールではありません。「3クリックでプロ並みのゲームが完成!」なんてことは絶対にありえないし、覚えることは山ほどあります。画面のボタンの多さに圧倒され、C#という言語の壁にぶつかり、心が折れそうになる夜も来るでしょう。
でも、安心してください。
現役エンジニアとして、そして多くの初心者をメンターとして導いてきた経験から断言します。正しい手順と、「ここは適当でいい」「ここは絶対に外せない」という勘所さえ押さえれば、誰でも必ず2Dゲームを完成させることができます。
ここから共有するのは、単なる機能説明書ではありません。私自身が数え切れないほどの失敗を重ねて見つけた、初心者が「挫折しないため」の生存ガイドです。かなり長い旅になりますが、読み終える頃には、あなたのPCの中で、あなただけのキャラクターが動き出しているはずです。

なぜ初心者は「3D」ではなく「2D」を選ぶべきなのか
「どうせ作るなら、オープンワールドのリアルな3D RPGが作りたい!」
その気持ち、痛いほどわかります。私も最初はそうでした。いきなり3Dの地形を作って、アセットストアで買ったリアルなドラゴンを置いて…そして、絶望しました。キャラが地面をすり抜け、カメラは壁に埋まり、計算式は宇宙語に見えました。
これからゲーム開発を始めるあなたが、絶対に「2D」からスタートすべき理由は、技術的なハードルの高さだけではありません。
「軸」が一つ少ないだけで、難易度は1/10になる
3Dゲーム開発の最大の敵、それは「Z軸(奥行き)」です。
2Dなら「右に行けばXが増える、上に行けばYが増える」。これだけです。小学校の算数レベルで理解できます。
しかし、ここにZ軸が加わると、途端に話が変わります。カメラの制御、キャラクターの回転(クォータニオン)、3次元的な衝突判定。これらが指数関数的に複雑さを増していくのです。初心者がここでつまずくと、ゲームの面白さを作る前に「数学との戦い」で力尽きてしまいます。
「素材」がモチベーションを左右する
3Dモデルを自作しようとすると、「Blender」などのモデリングソフトを覚えるだけで数ヶ月かかります。骨(ボーン)を入れて、ウェイトを塗って、アニメーションをつけて…。ゲームエンジンに触る前に心が折れます。
2Dならどうでしょうか。極端な話、ペイントソフトで描いた「棒人間」でも、Unityに放り込めば立派な主人公になります。フリー素材も扱いやすく、自分のイメージを形にするまでのスピードが圧倒的に速いのです。
ゲームの「面白さ」の本質は2Dにある
スーパーマリオも、ドラクエも、ポケモンも、原点は2Dです。「敵に当たったらダメージ」「穴に落ちたらゲームオーバー」「アイテムを取ったらパワーアップ」。こうしたゲームの基礎ロジックは、2Dでも3Dでも変わりません。
まずはシンプルな2D環境で、「ゲームを完成させる(Buildする)」という成功体験を積んでください。その自信が、将来3Dに挑戦するときの最強の武器になります。
開発環境を整える:最初の罠を回避せよ
さあ、道具を揃えましょう。しかし、ここにも初心者が陥りやすい「最初の罠」があります。「いきなりUnity本体をインストールしてはいけない」ということです。
手順1:Unity IDの作成
まずは公式サイトに行き、Unity IDを作成します。これは無料版(Personalライセンス)を使うために必須のパスポートです。Googleアカウント連携でも構いません。
手順2:Unity Hubという「司令塔」を入れる
ここが重要です。Unityというソフトは、毎年新しいバージョンが出ます(2021, 2022, 6…)。プロジェクトによって使うバージョンが違うことも日常茶飯事です。これらを一元管理するためのツールがUnity Hubです。
Unity本体ではなく、まずこの「Unity Hub」をダウンロード・インストールしてください。
手順3:エディタのバージョンは「LTS」一択
Unity Hubを起動し、「インストール」タブからエディタを入れます。ここでバージョン選びの選択肢がズラリと並びますが、迷わずLTS(Long Term Support)と書かれているものを選んでください。
最新版(Tech Stream)は魅力的な新機能が満載ですが、開発中の機能も多く、予期せぬバグが含まれている可能性があります。学習中にエラーが出たとき、「自分のコードが間違っているのか、Unityのバグなのか」が判断できないのは、初心者にとって致命的なストレスになります。
LTSは「長期サポート版」として安定動作が保証されています。学習用にはこれ以外あり得ません。
※インストール時にモジュールの選択画面が出ますが、最初は「日本語言語パック」と、コードを書くためのエディタ(WindowsならVisual Studio、MacならVisual Studio for MacまたはVS Code)を入れておけば十分です。スマホ向けビルド機能などは後からでも追加できます。
手順4:プロジェクト作成の分かれ道
「新しいプロジェクト」を作成する際、テンプレート選びで悩みます。現在は主に2つの選択肢があります。
- 2D (URP): Universal Render Pipeline。光や水などの表現が美しく、現在の標準となりつつある高品質な設定。
- 2D (Built-in): 昔ながらの標準機能。枯れた技術なので、古いチュートリアル記事と画面が一致しやすい。
これから本気で学ぶなら、将来性を考えて「2D (URP)」をおすすめしますが、古い入門書を参考にする場合は通常の「2D」のほうが混乱が少ないかもしれません。どちらを選んでも、基本的な操作感やC#の書き方は変わりません。ここでは、これからのスタンダードであるURPを前提にしつつ、汎用的な知識を中心に解説していきます。
コックピットを理解する:5つの主要ウィンドウ
プロジェクトを作成し、Unityが起動すると、まるでSF映画の宇宙船のコックピットのような複雑な画面が表示されます。ここで「うわっ…」となってそっと閉じてしまう人が、実は半数近くいるのではないかと私は思っています。
でも、安心してください。実際にゲーム開発で頻繁に使うのは、以下の5つのエリアだけです。他は必要な時に覚えればいいのです。
1. Scene(シーン)ビュー:撮影スタジオ
画面中央の大きなエリアです。ここは「ゲームを作る作業場」です。背景を配置したり、キャラクターを置いたり、敵を並べたり。映画撮影で言えば、セットを組むスタジオそのものです。ここで自由な角度から世界を覗き込み、構築していきます。
2. Game(ゲーム)ビュー:放送される映像
「カメラ越しに見えている、プレイヤーが見る実際の画面」です。Sceneビューでどれだけ裏側を作り込んでも、このGameビューに映っていなければプレイヤーには見えません。画面上部の再生ボタン(▷)を押すと、このGameビューの中でゲームが動き出します。
メンターからの助言:作業効率を上げるために、Sceneビューの隣や下にGameビューを並べて表示させておくのがプロの常套手段です。「配置したらどう見えるか」がリアルタイムでわかるからです。
3. Hierarchy(ヒエラルキー)ウィンドウ:出演者リスト
画面左側(標準配置)にあるリストです。現在、このステージ(シーン)に存在しているすべてのモノ(キャラクター、背景、カメラ、ライト、システムなど)が、ここに名前で一覧表示されています。
逆に言えば、ここに名前がないものは、ゲーム世界には存在しません。モノ同士の親子関係(親が動けば子も動く)を作るのも、このリスト上でのドラッグ&ドロップで行います。
4. Project(プロジェクト)ウィンドウ:素材倉庫
画面下部にあるエリアです。ここには、ゲームに使う「かもしれない」全データが入っています。画像、音声、3Dモデル、スクリプトなどです。
重要なのは、「ここにあるだけではゲームには登場しない」ということ。倉庫からHierarchy(ステージ)に引っ張り出して初めて、ゲームの一部になります。
5. Inspector(インスペクター)ウィンドウ:詳細設定パネル
画面右側にあるエリアです。Hierarchyで特定のオブジェクトを選択すると、その詳細情報がここに表示されます。
「位置(Position)」「大きさ(Scale)」「色(Color)」など。Unityでの開発作業の7割は、このInspectorの数値を調整する時間だと言っても過言ではありません。

いざ実践、キャラクターに命を吹き込む
画面の見方がわかったところで、実際に手を動かしていきましょう。目指すは、シンプルな2Dアクションゲームの基礎です。
素材(スプライト)のインポートと配置
まずは主人公となる画像が必要です。手持ちのPNG画像があればProjectウィンドウにドラッグ&ドロップしてください。なければ、Projectウィンドウ内で右クリック → Create → Sprites → Square などで、仮の四角形を作ることもできます。Unityでは、2Dゲーム用の画像をSprite(スプライト)と呼びます。
Projectウィンドウにある画像を、Hierarchy(またはSceneビュー)にドラッグ&ドロップしてみましょう。
画面に画像が表示されましたね?
Inspectorを見てください。一番上にTransformという項目があります。
- Position: X, Y座標。2DなのでZは基本的に0でOK。
- Rotation: 回転角度。
- Scale: 拡大縮小。
この数値をいじって、画面の中央あたりに配置してみてください。
「重力」という魔法をかける:Rigidbody 2D
このまま再生ボタンを押しても、絵が表示されるだけで何も起きません。この絵に「物理法則」を与える必要があります。
Inspectorの一番下にある「Add Component」ボタンを押し、検索窓に「Rigid」と入力して、Rigidbody 2Dを選んでください。(※3D用の「Rigidbody」と間違えないように注意!)
これをつけて、再生ボタンを押すと……。
キャラクターがストンと下に落ちていくはずです。
たったこれだけ。プログラミングを1行も書かずに、あなたのキャラクターに「重力」が宿りました。これがUnityの「コンポーネント指向」の凄さです。機能(コンポーネント)をペタペタと貼り付けるだけで、オブジェクトは役割を持つのです。
地面を作り、衝突させる:Collider 2D
落ちていくだけではゲームになりません。受け止める地面を作りましょう。
別の四角形の画像を配置し、ScaleのXを大きくして横長にします。これをキャラの下に配置します。
しかし、再生するとキャラは地面をすり抜けて落ちていきます。なぜか?
「当たり判定(Collider)」がないからです。見た目はあっても、物理的には「空気」と同じ状態なのです。
地面のオブジェクトに「Add Component」で Box Collider 2D を追加します。
キャラクターの方にも Box Collider 2D(丸いキャラならCircle Collider 2D)を追加します。
- 動くもの(キャラ):Rigidbody 2D + Collider 2D
- 動かないもの(地面):Collider 2D のみ
これで再生すると、キャラが地面の上で「トンッ」と着地して止まるはずです。Unityの物理エンジンが、衝突を計算してくれたのです。
自分の言葉で操る:C#スクリプト
ここからが本当のゲーム作りです。「キーボードの右を押したら右に進む」。この意思を伝えるために、プログラミング言語C#を使います。
Projectウィンドウで右クリック → Create → C# Script。
ファイル名はすぐに「PlayerController」に変更してください。(※生成直後に名前を変えないと、中のクラス名とファイル名が食い違ってエラーになります。これは初心者が必ず踏む地雷の一つです)
スクリプトをダブルクリックしてエディタを開き、以下のように記述します。最初は意味がわからなくても、書き写す(写経する)だけで大丈夫です。
using UnityEngine;
public class PlayerController : MonoBehaviour
{
// publicをつけると、UnityのInspector画面で数値を変更できるようになる
public float speed = 5.0f;
public float jumpPower = 10.0f;
private Rigidbody2D rb;
// Startはゲーム開始時に1回だけ呼ばれる準備運動のようなもの
void Start()
{
// 自分についているRigidbody2Dコンポーネントを見つけてきて、rbという箱に入れる
rb = GetComponent<Rigidbody2D>();
}
// Updateは1フレームごとに毎回呼ばれる。動き続ける処理はここに書く
void Update()
{
// キーボードの左右入力(左:-1.0 ~ 右:1.0)を取得
float moveX = Input.GetAxis("Horizontal");
// 速度を書き換える(X方向は入力×スピード、Y方向は今のまま維持)
rb.velocity = new Vector2(moveX * speed, rb.velocity.y);
// ジャンプ処理(スペースキーが押されたら)
if (Input.GetButtonDown("Jump"))
{
// Y方向の速度を上書きして飛び上がらせる
rb.velocity = new Vector2(rb.velocity.x, jumpPower);
}
}
}
書き終わったら保存してUnityに戻ります。
作成した「PlayerController」スクリプトを、Hierarchyのキャラクターにドラッグ&ドロップしてアタッチ(貼り付け)します。
Inspectorを確認すると、「Player Controller (Script)」という項目が増えていて、「Speed」や「Jump Power」という数字の入力欄があるはずです。これが、コード内でpublicをつけた効果です。コードを書き直さなくても、ゲームを再生しながらこの数字を変えて、気持ちいい操作感を探ることができるのです。
さあ、再生ボタンを押してください。
矢印キーで左右に移動し、スペースキーでジャンプする。
あなたの書いたコードが、キャラクターを動かした瞬間です。

ゲームとしての深みを出すための重要概念
動くだけではまだ「実験」です。ここから「ゲーム」にするための重要な概念を3つ紹介します。
1. 衝突の種類の使い分け(Collision vs Trigger)
ゲームには2種類の「当たり」があります。
一つは、壁や地面のように「ぶつかって止まる・跳ね返る」もの。これをCollision(コリジョン)と呼びます。
もう一つは、コインやゴール地点のように「すり抜けるけれど、触れたことは検知したい」もの。これをTrigger(トリガー)と呼びます。
コインのようなアイテムを作りたい場合は、Collider 2Dコンポーネントにある Is Trigger というチェックボックスをオンにします。
コード側での処理も変わります。
- ぶつかる場合:
void OnCollisionEnter2D(Collision2D collision) - すり抜ける場合:
void OnTriggerEnter2D(Collider2D other)
例えば、「敵に当たったら(ぶつかったら)ゲームオーバー」「コインに触れたら(すり抜けたら)スコア加算」といった使い分けをします。この区別がつくと、ゲームのギミックが一気に作りやすくなります。
2. タグ(Tag)での識別
衝突した相手が「敵」なのか「地面」なのか「ゴール」なのか。これを判別するためにTag(タグ)を使います。
Inspectorの上部にある「Tag」プルダウンから「Add Tag」を選び、「Enemy」や「Goal」といったタグを自分で登録します。
そして、敵オブジェクトのTagを「Enemy」に設定しておきます。
コード内では以下のように判定します。
void OnCollisionEnter2D(Collision2D collision)
{
// ぶつかった相手のタグが "Enemy" だったら
if (collision.gameObject.CompareTag("Enemy"))
{
Debug.Log("やられた!");
// ここにゲームオーバー処理やシーンのリロードを書く
}
}
3. プレハブ(Prefab)による量産
これはUnityにおける「発明」レベルの機能です。
例えば、ステージ上に敵を10体配置したとします。後から「敵の移動スピードを少し上げたい」と思ったとき、10体すべてのInspectorを一つずつ修正するのは地獄ですよね?
Hierarchyで作って設定を済ませた敵オブジェクトを、Projectウィンドウにドラッグ&ドロップします。するとアイコンが青色に変わります。これがPrefab(プレハブ)化です。
Prefabはいわば「金型」です。ProjectウィンドウにあるPrefabの設定を一つ変えれば、ステージに配置されている全ての敵(インスタンス)にその変更が一瞬で反映されます。
同じ役割を持つオブジェクトは、必ずPrefab化する癖をつけてください。これが開発効率を劇的に変えます。

初心者が必ず直面する「謎の現象」と解決策
私自身も何度も夜通し悩まされた、Unity初心者あるあるトラブルとその対処法を共有します。これを知っているだけで、解決までの時間を数時間短縮できます。
事件1:キャラクターが転んで起き上がれない
症状:移動しようとすると、キャラがボールのようにゴロンと転がってしまい、まともに歩けない。
原因:物理演算を使っているため、地面との摩擦で回転力が働いてしまうからです。
解決策:キャラクターのRigidbody 2Dにある Constraints(制約) という項目を開き、Freeze Rotation Z にチェックを入れてください。これでZ軸(2Dでの回転軸)が固定され、転ばなくなります。
事件2:壁をすり抜けて異世界へ
症状:猛スピードで壁に突っ込むと、壁を突き抜けて向こう側に行ってしまう。
原因:移動速度が速すぎて、1フレームの計算の間に壁の厚さを飛び越えてしまったためです。
解決策:Rigidbody 2Dの Collision Detection を「Discrete」から 「Continuous」 に変更してください。計算負荷は少し上がりますが、移動中の衝突判定が精密になり、すり抜けを防げます。
事件3:UIが画面からはみ出す、小さすぎる
症状:スコアなどの文字を配置したのに、スマホで見ると豆粒みたいに小さい、あるいは巨大すぎてはみ出している。
原因:解像度の設定ミスです。
解決策:UIを配置すると自動生成される「Canvas」オブジェクトを選択し、Inspectorの Canvas Scaler コンポーネントを見てください。UI Scale Mode を「Constant Pixel Size」から 「Scale With Screen Size」 に変更し、Reference Resolutionを「1920 x 1080」などに設定します。これで、どんな画面サイズの端末でも、比率を保って自動調整してくれます。
ゲームを仕上げ、世に出す準備
ゲームの体を成してきました。最後は、スコア表示やシーン遷移、そして書き出しです。
UIで情報を伝える
Hierarchyで右クリック → UI → Text - TextMeshPro を選びます(従来のTextより綺麗なので、現在はこれが標準です)。Canvasという透明な画用紙の中にテキストが配置されます。
スクリプトからスコアを更新するには、using TMPro; を冒頭に追加し、TextMeshProUGUI 型の変数を用意してテキストオブジェクトを紐付けます。
シーンを繋ぐ
タイトル画面、ゲーム本編、ゲームオーバー画面。これらは別々の「シーン」として作ります。
File → New Scene で新しいシーンを作り、ボタン(UI → Button)を配置します。
シーン移動には using UnityEngine.SceneManagement; が必要です。SceneManager.LoadScene("GameScene"); のように記述してシーン名を指定すれば移動できます。
重要:File → Build Settings を開き、「Scenes In Build」リストに、作成した全てのシーンをドラッグ&ドロップで登録しておくのを忘れないでください。これをしないと、エラーが出てシーン移動できません。
ビルド(書き出し)
完成したら、File → Build Settings で Build ボタンを押します。
保存先を指定してしばらく待つと、Windowsなら「.exe」、Macなら「.app」ファイルが生成されます。Unityが入っていない友達のPCでも、あなたのゲームが動くようになります。
特におすすめなのがWebGLビルドです。これはWebブラウザ上で動く形式です。「unityroom」などの投稿サイトにアップロードすれば、URLをシェアするだけで、世界中の人にスマホやPCからすぐに遊んでもらえます。自分が作ったものを誰かに遊んでもらい、感想をもらう。これこそがゲーム開発の最大の醍醐味です。

副業・キャリアとしてのUnityスキル
ここまで読んで「難しそうだな」と感じたでしょうか。それとも「意外といけるかも」と感じたでしょうか。
実は、今学んでいるUnityのスキルは、ゲーム作り以外にも大きな可能性を秘めています。
今、Unityエンジニアの需要はゲーム業界の外側でも爆発的に伸びています。
例えば、建設業界での建築ビジュアライゼーション(建物の内覧シミュレーション)、自動車業界でのコンフィギュレーター開発、そして医療や教育分野でのVR/ARトレーニングアプリなどです。これらは「xR領域」と呼ばれ、単価も非常に高い傾向にあります。
副業としても、簡単なARアプリの制作や、企業のメタバースイベント用ワールド制作など、数十万円単位の案件が存在します。「ゲームが好き」という気持ちから始めたスキルが、気づけば強力なキャリアの武器になっている。そんなエンジニアを私はたくさん見てきました。
もちろん、最初からそこを目指す必要はありません。まずは「自分の作りたいもの」を作る。その情熱が続く限り、スキルは勝手についてきます。そしてある日、それが誰かの役に立つ仕事に変わる瞬間が来るかもしれません。
未完成の「クソゲー」こそが最強の第一歩
最後に、これからクリエイターとしての道を歩み始めるあなたに、どうしても伝えておきたいことがあります。
それは、「最初から名作を作ろうとしないでください」ということです。
初心者が挫折する最大の原因は、理想と現実のギャップです。
「あのインディーゲームのような美しいグラフィックで、重厚なストーリーで、オンライン対戦もできて…」
そんな壮大な計画を立てると、100%エターなり(未完成で終わる)ます。断言します。
最初は、ただ四角い箱が左右に動くだけのゲームでいいんです。
当たり判定がおかしくて、たまに床に埋まるゲームでいいんです。
いわゆる「クソゲー」でいいんです。
重要なのは、「作り始めて、完成させて(Buildして)、誰かに見せる(公開する)」というサイクルを、どんなに小さくてもいいから一度回し切ることです。
未完成の超大作よりも、完成したクソゲーの方が、開発者としての経験値は100倍高いです。ビルドされたexeファイルが自分のPCで動いた時の、「自分の世界が独立して存在している」という感動を味わってください。
Unityは、あなたの想像力を現実に変える魔法の杖です。
使い方は少し複雑で、たまに理不尽なエラーも吐きますが、一度振り方を覚えれば、あなたは「消費者」から「創造者」へと変わることができます。
今日、あなたがインストールしたそのエディタから、もしかしたら数年後、世界を熱狂させるゲームが生まれるかもしれません。いや、世界を熱狂させなくても、あなた自身が最高に楽しめる世界が生まれるなら、それで十分最高だとは思いませんか?
さあ、Unity Hubを起動しましょう。
「New Project」ボタンを押して、あなたの冒険を始めてください。真っ白なSceneビューが、あなたのアイデアを待っています。

そして、もし途中で行き詰まったら、このガイドをまた読み返してみてください。エラーメッセージをコピーして検索してみてください。先人たちが残した解決策が必ずそこにあります。あなたは一人ではありません。世界中のUnity開発者が、画面の向こうで同じバグと戦っている仲間です。
健闘を祈ります。
Happy Coding!
