「Unityで2Dゲームを作ってみたいけど、何からどう手を付ければいいのかわからない」——そんな風に感じたことはありませんか?ネットで調べても、機能ごとの断片的な情報ばかりで、結局どの順番で進めればいいのか迷ってしまう方も多いはずです。この記事では、実際に1つの2Dゲームを作りながら、プロジェクトの作成からキャラクターの動き、当たり判定、スコア表示までの流れを順番に見ていきます。
Unityで2Dプロジェクトを作成する
2Dゲーム作りは、まずUnity Hubで専用のテンプレートを選んでプロジェクトを立ち上げるところからスタートします。ここでのテンプレート選びが、この後の描画設定などに関わってくるので、最初にしっかり押さえておきましょう。
さっそく、プロジェクトを作成する手順を見ていきますね。
- Unity Hubを起動し、画面右上あたりにある「新規プロジェクト」をクリックします。
- テンプレートの一覧から「ユニバーサル2D(Universal 2D)」を選択します。2D専用の描画システムが最初から組み込まれているテンプレートです。
- プロジェクト名(例:Simple2DGame)を入力します。日本語や記号が混ざるとエラーの原因になることがあるので、半角英数字にしておくと安心です。
- 保存先フォルダを指定し、「プロジェクトを作成」をクリックします。
プロジェクトが開いたら準備は完了です。次は、実際に画面に表示するキャラクターを作っていきましょう。
プレイヤーキャラクター(Actor)を配置する
キャラクターの見た目を用意する作業は、実は難しい設定はほとんどありません。Sprite(スプライト)というオブジェクトを作り、そこに好きな画像を割り当てるだけで、画面上にキャラクターが表示されるようになります。
それでは、Actor(プレイヤーキャラクター)を配置する手順を見ていきましょう。
- ヒエラルキー(Hierarchy)ウィンドウ内で右クリックし、「2D Object」→「Sprites」→「Square」を選択します。
- 作成されたオブジェクトの名前を「Actor」に変更しておきます。あとで見返したときにわかりやすくするためです。
- Actorを選択した状態でインスペクター(Inspector)を開き、「Sprite Renderer」コンポーネント内の「Sprite」欄に、プロジェクト(Project)ウィンドウからキャラクター画像をドラッグ&ドロップします。
これで、四角形だったオブジェクトに好きな画像が表示されるようになります。ただ、用意した画像のサイズによっては、画面に対してキャラクターが大きすぎることも珍しくありません。
その場合は、Transformコンポーネントの「Scale」を調整しましょう。XとYの値をどちらも0.4程度にすると、ちょうどよいバランスになりやすいです。この数値はあくまで目安なので、実際の画面を見ながら少しずつ調整してみてくださいね。

キャラクターの見た目が整ったら、次はいよいよ「動く」「ぶつかる」といった、ゲームらしい挙動を作り込んでいきます。
Rigidbody 2DとCollider 2Dで当たり判定を作る
キャラクターを動かしたり、地面や壁とぶつけたりするには、「Rigidbody 2D」と「Collider 2D」という2つのコンポーネントが欠かせません。どちらか片方だけでは物理的な衝突は発生しないので、まずはこの2つの役割の違いを押さえておきましょう。
Rigidbody 2Dを追加して物理挙動をつける
Rigidbody 2Dは、重力や力の影響を受けさせるためのコンポーネントです。これを付けることで、キャラクターが自然に落下したり、力を加えて動かしたりできるようになります。
- Actorを選択し、インスペクターの「Add Component」から「Rigidbody 2D」を追加します。
- 「Constraints」の項目を開き、「Freeze Rotation Z」にチェックを入れます。地面に着地したときや何かにぶつかったときに、キャラクターがコロンと転倒してしまうのを防ぐためです。
Rigidbody 2Dの詳しい仕組みや、他の使い方についてはこちらの記事でも解説しています。
Box Collider 2Dで当たり判定を設定する
Rigidbody 2Dだけでは、まだ「物理的にぶつかる」という判定は発生しません。実際の当たり判定を作るのが、Collider 2Dの役割です。
- 「Add Component」から「Box Collider 2D」を追加します。
- 「Edit Collider」ボタンを押すと、画像の周りに緑色の枠線が表示されます。これをドラッグして、画像のサイズに合わせて調整しましょう。
- 細かく数値で調整したい場合は、OffsetやSizeの項目に直接入力することもできます。たとえばOffsetを(0.16, -0.24)、Sizeを(2.12, 3.2)のように設定すると、より画像にフィットした当たり判定になります。
この数値はあくまで一例です。使用する画像のサイズや形によって最適な値は変わるので、実際の見た目を確認しながら微調整してくださいね。
地面(Ground)にも同じ設定を行う
キャラクター側の設定が終わったら、次は着地する側、つまり地面のオブジェクトにも設定を加えます。
- 新しくSpriteオブジェクトを作成し、名前を「Ground」に変更します。
- 「Box Collider 2D」を追加します。
- 「Rigidbody 2D」も追加しますが、そのままだと地面まで重力で落下してしまうため、「Body Type」を「Kinematic」または「Static」に変更しておきます。
ワンポイント
Collider 2Dの仕組みをもう少し詳しく知りたい方は、こちらの記事も参考にしてみてください。
これでキャラクターが地面の上に立てるようになりました。次は、キーボード操作でこのキャラクターを動かせるようにしていきます。
C#スクリプトでキャラクターを移動させる
キャラクターと地面の準備が整ったら、いよいよキー操作で動かしてみましょう。難しく感じるかもしれませんが、やっていることはシンプルで、キー入力を受け取って、その情報をRigidbody 2Dの速度に渡しているだけです。
ActorControllerスクリプトを作成する
まずは、キャラクターの動きを管理するスクリプトを用意します。
- プロジェクト(Project)ウィンドウ内で右クリックし、「Create」→「C# Script」を選択します。
- スクリプト名を「ActorController」に変更します。
- 作成したスクリプトを、ヒエラルキー内のActorオブジェクトへドラッグ&ドロップしてアタッチします。
この時点ではまだ中身が空っぽの状態なので、次にコードを書き込んでいきます。
左右キー入力で移動速度を反映させる
スクリプトをダブルクリックして開いたら、左右キーの入力を検知して、Rigidbody 2Dの速度に反映させる処理を書いていきます。
Input.GetKey(KeyCode.RightArrow)のような形でキー入力を取得し、その結果をrigidbody2D.velocityに代入することで、キャラクターが左右に動くようになります。移動速度は6.0f程度から試してみると、扱いやすい速さになりやすいです。
ここで気をつけたいのが、この処理を書き込む場所です。物理的な動きに関わる処理は、Updateではなく「FixedUpdate」メソッド内に書くのが基本になります。UpdateとFixedUpdateでは呼び出されるタイミングの仕組みが異なり、物理演算をFixedUpdate側にまとめることで、動きのブレを防ぎやすくなるためです。
進行方向に合わせてキャラクターの向きを変える
左右に動くようになったら、次は見た目の向きも合わせておきましょう。右に進んでいるのに左向きのままだと、少し不自然に見えてしまいますよね。
ここでは、SpriteRenderer.flipXという項目の真偽値(true・false)を、進行方向に応じて切り替える処理を追加します。左に動いているときはtrue、右に動いているときはfalseにする、といった形で条件分岐を組んでおくと、自然に向きが反転するようになります。
キャラクターの移動方法には、キー操作以外にもクリックやランダム移動など、いくつかのパターンがあります。他の動かし方も気になる方は、こちらの記事もあわせてチェックしてみてください。
キャラクターが自由に動けるようになったら、次は舞台となるステージを作り込んでいきましょう。
タイルマップでステージを作る
キャラクターが動けるようになったら、次は舞台となるステージを整えていきましょう。地面や壁を1つずつ配置していく方法もありますが、Tilemapという機能を使うと、パレットとブラシでサクサクとステージを描いていけます。
それでは、Tilemapを使ったステージ作成の流れを見ていきますね。
- ヒエラルキー内で右クリックし、「2D Object」→「Tilemap」→「Rectangular」を選択します。これでステージの土台となるTilemapオブジェクトが作成されます。
- 「Window」→「2D」→「Tile Palette」を開き、「Create New Palette」から新しいパレットを作成します。
- 使用したい画像素材を、作成したパレットにドラッグ&ドロップして登録します。
- ブラシツールを選択し、シーン(Scene)ビュー上でクリックやドラッグをしながらステージを描いていきます。
マス目に沿って画像を配置していけるので、地面や足場を1つずつ手作業で並べるよりも、ずっと効率よくステージを作れます。
ただ、このままではまだ見た目だけのステージなので、キャラクターが乗っても素通りしてしまいます。当たり判定を持たせるために、Tilemapオブジェクトに「Tilemap Collider 2D」コンポーネントを追加しておきましょう。
ワンポイント
敵キャラクターや足場のように何度も登場するオブジェクトは、プロジェクトウィンドウにドラッグして「プレハブ(Prefab)」化しておくと、後からまとめて設定を変更したり、スクリプトから生成したりしやすくなります。
プレハブの具体的な作り方や活用方法については、こちらの記事でくわしく解説しています。
ステージが完成したら、あとはゲームらしい仕上げとして、スコアを画面に表示する仕組みを作っていきましょう。
スコアをUIに表示する
キャラクターが動き、ステージの上を歩けるようになったら、いよいよゲームらしさを仕上げる工程です。CanvasとTextMeshProでスコア表示用のUIを作り、専用のスクリプトと連携させれば、画面上にスコアが反映されるようになります。
CanvasとTextMeshProを配置する
まずは、スコアを表示するための土台となるUIを用意します。
- ヒエラルキー内で右クリックし、「UI」→「Canvas」を作成します。画面にUI要素を表示するための土台になります。
- 作成したCanvasの子要素として、「UI」→「Text – TextMeshPro」を追加します。
初めてTextMeshProを使う場合、インポート用のウィンドウが表示されることがあります。その際は案内に沿って必要なパッケージを読み込んでおきましょう。
ScoreManagerスクリプトでスコアを管理する
UIの見た目ができたら、次はスコアの数値を管理するスクリプトを作成します。
- 新しいスクリプト「ScoreManager」を作成します。
- スコアを保持するための
int scoreという変数を用意します。 - スコアを加算するための
AddScore(int value)メソッドを作成します。 - 数値をテキストに反映させるための
UpdateScoreUI()メソッドを作成します。
最後に、空のゲームオブジェクト(例:GameManager)を作成してScoreManagerスクリプトをアタッチします。インスペクター上で、先ほど作ったTextオブジェクトを対応する変数に紐付ければ、スコアが加算されるたびに画面の表示も更新されるようになります。
ここまでで、キャラクターが動き、地面やステージと衝突し、スコアが表示されるという、2Dゲームとして最低限の形が完成しました。この後さらにゲームを作り込みたくなった方には、Unity 6でのゲーム制作を体系的にまとめた書籍もおすすめです。
たのしい2Dゲームの作り方 第3版 Unity 6ではじめるゲーム開発入門
✅ Amazonでチェックする|✅ 楽天でチェックする
なお、今回作ったスコアはゲームを閉じると消えてしまいます。プレイヤーが再度アプリを開いたときにもハイスコアを残しておきたい場合は、保存の仕組みを別途追加する必要があります。
スコアを保存する方法については、こちらの記事でくわしく解説しています。
これで、動き・当たり判定・スコアがそろった1本のゲームが完成しました。最後に、制作中につまずきやすいポイントを整理しておきましょう。
Unity 2Dゲーム制作でつまずきやすいポイント
ここまでの手順通りに進めれば、動く・ぶつかる・スコアが増えるという一連の流れは完成します。ただ、実際に手を動かしていると「思っていた感触と違う」「なぜか反応しない」といった場面に出会うこともあるはずです。よくあるつまずきポイントを、先に知っておきましょう。
- キャラクターの動きがフワフワする:Unityのデフォルトの重力設定は控えめなため、ジャンプや落下がゆっくりに感じられることがあります。「Project Settings」→「Physics 2D」内の「Gravity Y」を-30程度まで強めると、キビキビとした操作感に近づけやすくなります。
- Is Triggerの有無で挙動が変わる:Collider 2Dの「Is Trigger」にチェックを入れると、物理的な押し返しはなくなり、代わりに接触したことだけを検知できるようになります。アイテムの取得判定のように「すり抜けさせつつ検知したい」場面ではオン、地面や壁のように「物理的にぶつけたい」場面ではオフ、という使い分けが基準になります。
- FixedUpdateとUpdateの取り違え:物理演算に関わる処理をUpdate内に書いてしまうと、動きが環境によって不安定になることがあります。移動やジャンプなどRigidbody 2Dを操作する処理は、FixedUpdate側にまとめておくのが安定した基準です。
これらはどれも、動作自体はするけれど「思った通りにならない」というタイプのつまずきです。エラーとして表示されるわけではない分、原因に気づきにくいので、違和感を覚えたときは上記の3点を見直してみてください。
ここで紹介した内容はあくまで基本的な考え方の整理です。もっとやさしく、体系的にUnity 2D制作の基礎を学び直したい場合は、こちらの書籍も参考になります。
楽しく学ぶ Unity「2Dゲーム」作りのきほん
✅ Amazonでチェックする|✅ 楽天でチェックする
まとめ
今回は、プロジェクトの作成からキャラクターの移動、当たり判定、ステージ作り、スコア表示までを1本の流れとして進めてきました。バラバラに見えていた機能も、こうして順番に組み合わせていくと、1つのゲームとして形になっていく感覚がつかめたのではないでしょうか。
ここで作った土台は、キャラクターの種類やステージのデザインを変えるだけで、いろいろなジャンルの2Dゲームに応用できます。次は敵キャラクターの追加や、スコアの保存など、気になった部分から少しずつ発展させてみてくださいね。
よくある質問
-
QUnity 6以外の古いバージョンでもこの手順は使えますか?
-
ARigidbody 2D、Collider 2D、TextMeshProといった基本的なコンポーネントの使い方自体は大きく変わっていないため、多くの手順はそのまま参考にできます。ただし、細かいメニューの配置やパッケージの初期状態はバージョンによって異なる場合があるので、画面が記事と少し違っていても慌てず、名称を手がかりに探してみてください。
-
Q敵キャラクターやアイテムはどう追加すればいいですか?
-
A基本的な考え方は今回のActorと同じで、Sprite・Rigidbody 2D・Collider 2Dを組み合わせて作成します。何度も配置するオブジェクトになるので、プレハブ化しておくと管理がぐっと楽になります。具体的な動かし方やAIの実装については、また別のテーマとして扱えるボリュームがあるため、関連記事もあわせて参考にしてみてください。
-
Qスコアやプレイ状況をセーブするにはどうすればいいですか?
-
A今回作成したScoreManagerは、あくまで画面上にスコアを表示するための仕組みで、ゲームを閉じると数値はリセットされます。ハイスコアなどを次回起動時にも残したい場合は、PlayerPrefsなどを使ったデータの保存処理を別途組み込む必要があります。












※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。