Unityでスマホゲームを作ってみたいけど、パソコン向けと何が違うのか分からず手が止まっていませんか。エディタは触ったことがあっても、いざスマホ向けにするとなると設定項目が増えて戸惑ってしまいますよね。
この記事では、環境構築から画面対応、操作の実装、広告や課金、最適化、実機テスト、ストアへの公開申請まで、Unityでスマホゲームを1本仕上げるために必要な流れを順番に解説していきます。まずは、開発を始める前に整えておきたい準備から見ていきましょう。
Unityでスマホゲームを作る準備は何が必要?
Unityでスマホゲームを作るには、まずBuild Supportモジュールの追加とプラットフォームの切り替え、そしてPlayer Settingsの基本設定という3つの準備が必要です。どれもエディタ上で完結する作業なので、順番に進めていけば迷うことはありません。
Build Supportモジュールを追加する
Unityエディタは、インストールした時点ではスマホ向けに書き出す機能を持っていません。まずは対象のプラットフォーム向けに書き出すための機能を追加するところから始めましょう。
- Unity Hubを起動する
- 「インストール」タブを開き、使用しているUnityエディタのオプションメニューから「モジュールを加える」を選択する
- Android向けに開発するなら「Android Build Support」、iOS向けなら「iOS Build Support」にチェックを入れてインストールする
ここで気をつけたいのは、AndroidとiOSは別々のモジュールだということです。両方のOSに対応させたい場合は、両方ともチェックを入れておく必要があります。
Switch Platformでスマホ向けに切り替える
Unityの新規プロジェクトは、初期状態だとパソコン向けの設定になっています。この設定をスマホ向けに切り替える作業が、次のステップです。
- 上部メニューの「File」から「Build Profiles」(以前は「Build Settings」という名前でした)を開く
- 左側のプラットフォーム一覧から「Android」または「iOS」を選ぶ
- 右下にある「Switch Platform」ボタンをクリックする
切り替えが終わると、選んだプラットフォームに「Active」というマークが付きます。これでプロジェクト全体がそのプラットフォーム向けの設定に切り替わった状態です。
ワンポイント
Switch Platformはあくまでプロジェクトの内部設定を切り替える作業で、スマホにインストールできる実際のファイルを作る「ビルド」とは別の工程です。切り替えただけではまだスマホでは遊べないので、この段階では焦らず次の設定に進んで大丈夫ですよ。
Player Settingsで最低限設定すべき項目
プラットフォームの切り替えが終わったら、次はアプリとしての基本情報を入力していきます。ここを埋めておかないと、実機でテストする段階でつまずいてしまうので先に済ませておきましょう。
- 上部メニューの「Edit」から「Project Settings」を開く
- 左メニューの「Player」を選択する
- 「Product Name」に、スマホにインストールしたときアイコンの下に表示されるアプリ名を入力する
- 「Default Icon」に、アプリのアイコンにしたい画像を設定する(未設定のままだとUnityのロゴがアイコンになってしまいます)
- 「Other Settings」を開き、「Override Default Package Name」にチェックを入れて「Package Name」にアプリの識別子を入力する
- Android向けの場合は「Scripting Backend」を
IL2CPPに変更し、「Target Architectures」のARM64にチェックを入れる

Package Nameは、いわばアプリの住所のようなものです。一度ストアに公開したあとに変更すると別アプリ扱いになってしまうため、最初にしっかり決めておくと安心です。
スマホの画面サイズでUIが崩れないようにするには?
スマホは機種によって画面サイズや縦横比がバラバラなので、何も対策しないとUIパーツが画面からはみ出したり、位置がずれたりしてしまいます。この崩れを防ぐにはCanvas Scalerで画面サイズに追従させる設定と、必要に応じてセーフエリアへの対応の2段階で考えるとスムーズです。
Canvas ScalerでUIを画面サイズに追従させる
UIパーツをまとめる土台となるのがCanvasです。まずはCanvasを作成し、画面サイズに応じてUIが自動で拡大縮小されるように設定していきましょう。
- ヒエラルキー上で右クリックし、「UI」から「Canvas」を作成する
- 作成したCanvasを選択し、インスペクターの「Render Mode」を「Screen Space – Overlay」に設定する
- 「Canvas Scaler」コンポーネントの「UI Scale Mode」を「Scale With Screen Size」に変更する
- 「Reference Resolution」を
X: 720, Y: 1280に設定する - 「Screen Match Mode」を「Expand」に設定する
Reference Resolutionは、UIを設計するときの基準となる解像度です。ここで縦長のスマホに近い比率を指定しておくことで、いろいろな画面サイズでもバランスが崩れにくくなります。
UIパーツを配置するときは、Rect Transformの「Anchors」と「Pivot」も合わせて意識しておきたいポイントです。たとえば画面中央を基準にしたいならAnchorsのMinとMaxを両方とも(0.5, 0.5)にし、左上を基準にしたいならPivotを(0, 1)に変更します。タップ判定が不要な背景やテキストは、ImageやTextコンポーネントの「Raycast Target」のチェックを外しておくと、タッチ判定の処理コストを減らせます。
セーフエリア対応をスクリプトで自動化する
Canvas Scalerだけで対応できるのは、あくまで画面サイズに応じたUIの拡大縮小までです。ノッチや画面の角丸によってUIが隠れてしまう問題は、別途スクリプトで対応する必要があります。
「Canvas Scalerを設定したからセーフエリアも安心」と思ってしまいがちですが、これは別の仕組みです。ノッチ付きの端末を対象にする場合は、次のセーフエリア対応まで済ませておかないと、ボタンや文字が切れて見えてしまうことがあります。
セーフエリアとは、ノッチやホームバーなどに影響されずに安全に表示できる領域のことです。この領域に合わせてUIを自動調整するスクリプトを作っていきましょう。
- Canvasの直下に新しくPanelを作成し、すべてのUIパーツをそのPanelの子要素にする
- 新規C#スクリプト「SafeAreaAdjuster.cs」を作成し、以下のコードを記述する
- 作成したスクリプトを、手順1で作ったPanelにアタッチする
using System.Collections.Generic;
using UnityEngine;
public class SafeAreaAdjuster : MonoBehaviour
{
RectTransform _panel;
Rect _lastSafeArea = new Rect(0, 0, 0, 0);
void Awake()
{
_panel = GetComponent<RectTransform>();
UpdateSafeArea();
}
void Update()
{
UpdateSafeArea();
}
void UpdateSafeArea()
{
Rect safeArea = Screen.safeArea;
if (safeArea == _lastSafeArea)
{
return;
}
_lastSafeArea = safeArea;
Vector2 anchorMin = safeArea.position;
Vector2 anchorMax = safeArea.position + safeArea.size;
anchorMin.x /= Screen.width;
anchorMin.y /= Screen.height;
anchorMax.x /= Screen.width;
anchorMax.y /= Screen.height;
_panel.anchorMin = anchorMin;
_panel.anchorMax = anchorMax;
}
}
このスクリプトは、端末ごとのセーフエリア情報を毎フレーム確認して、Panelの表示範囲を自動で合わせてくれる仕組みです。ノッチのない端末を対象にしないと決めているなら、この対応は省略しても問題ありません。

逆に幅広い端末での公開を考えているなら、ここまで済ませておくと安心です。
スマホのタップ操作はどう実装する?
パソコン向けのゲームではマウスのクリックで操作を作ることが多いですが、スマホには当然マウスがありません。実は、Unityではクリックを検知するコードがそのままタップの検知にも使えるので、特別な書き換えをする必要はありません。
タップの判定をしたいオブジェクト(たとえばPlayerなど)に新しいC#スクリプトを作成し、Updateメソッドの中に判定処理を書いていきましょう。
- タップを検知したいオブジェクトを選択する
- 新規C#スクリプトを作成し、そのオブジェクトにアタッチする
- Updateメソッドの中に、画面がタップされた瞬間を検知するif文を記述する
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
void Update()
{
// 画面がタップされた瞬間の判定
if (Input.GetMouseButtonDown(0))
{
// ここにタップされた時の処理を書く
}
}
}
Input.GetMouseButtonDown(0)は、名前だけ見るとマウスのボタン専用に思えるかもしれません。ですが、スマホの実機上では画面をシングルタップした瞬間として扱われる仕様になっているので、パソコンで組んだ操作ロジックをそのままスマホに持っていける場面も多くあります。
「タップした瞬間だけ」処理をしたいのか、「タップし続けている間」処理をしたいのかによって使うメソッドは変わってきます。

今回のような単発の操作にはGetMouseButtonDownが向いていますが、長押しやドラッグのような操作を作りたい場合は、別の判定方法を検討する必要が出てくる場面です。
広告・課金はどうやって組み込む?
無料で遊べるスマホゲームを収益につなげるには、広告(AdMob)とアプリ内課金(UnityIAP)という2つの仕組みを組み込むのが代表的な方法です。どちらもUnity公式のパッケージを使えば導入できますが、設定する項目が多いので順番に見ていきましょう。
AdMobで広告を表示する手順
AdMobはGoogleが提供する広告配信サービスで、バナー広告やインタースティシャル広告などをアプリ内に表示できます。まずはSDKを取り込むところから始めます。
- Google Mobile Ads SDKの配布ページから、最新の
GoogleMobileAds.unitypackageをダウンロードする - Unityエディタの「Assets」から「Import Package」→「Custom Package」を選び、ダウンロードしたパッケージをインポートする
- 依存関係の自動解決ダイアログが出たら「Enable」を選択する(手動で行う場合は「Assets」→「External Dependency Manager」→「Android Resolver」を実行する)
- 「Assets」→「Google Mobile Ads」→「Settings」を開き、AdMobで作成したアプリIDを設定する
MobileAds.RaiseAdEventsOnUnityMainThread = true;を記述し、SDKのイベントをUnityのメインスレッドに同期させるMobileAds.Initialize()を呼び出して初期化し、初期化完了後にBannerViewなどを作成して広告をロード・表示する
開発中に本番用のアプリIDで広告をリクエストし続けると、AdMobのポリシー違反とみなされる恐れがあります。テストをしている間は、必ずテスト用のアプリIDに設定しておきましょう。
UnityIAPで課金を実装する手順
アイテム課金や広告非表示といった課金要素を作りたい場合は、Unity公式のIn-App Purchasingパッケージを使います。こちらはストア側の商品登録とスクリプト側の実装、両方の準備が必要です。
- 「Service」ウィンドウを開き、「In-App Purchasing」をONにする。求められるアプリの対象年齢などの項目を設定する
- 「Package Manager」を開き、使用しているUnityエディタで推奨されているバージョンの「In-App Purchasing」パッケージをインストールする
- C#スクリプトを作成し、
UnityEngine.Purchasingに含まれるIStoreListenerインターフェースを継承する - インターフェースに沿って、
OnInitialized・OnInitializeFailed・OnPurchaseFailed・ProcessPurchaseのメソッドを実装する - 初期化時に
ConfigurationBuilderを使ってストアに登録済みの商品IDと消費タイプ(ProductType)を追加し、購入時はm_storeController.InitiatePurchase(productId)を呼び出す
広告と課金は、それぞれ単体で組み込むだけでなく組み合わせて使うことも多い仕組みです。「広告を見たらアイテムがもらえる」「課金すれば広告が消える」といった設計は、この2つの実装が終わって初めて選べる選択肢になります。
どちらの機能をどのバランスで入れるかによって、アプリ全体の売上戦略はかなり変わってきます。広告と課金の具体的な組み合わせ方や、収益を伸ばすための考え方については、以下の記事で詳しく解説しているので合わせて参考にしてみてください。
スマホ向けの最適化はどこまでやるべき?
「最適化はどこまでやれば十分なのか」と迷う人は多いですが、答えはシンプルで実機で動かしたときに気になる症状が出ているかどうかが判断基準になります。快適に動いているならそれ以上手を加える必要はなく、カクつきや発熱があるなら原因を探るべきタイミングです。
Profilerで何を計測すればいいか
感覚だけで最適化を進めると、効果のない部分にばかり時間をかけてしまうことがあります。まずは実機の状態を数値で確認するところから始めましょう。
- Unity Profiler(「Window」→「Analysis」→「Profiler」):CPU負荷、GCの発生箇所、メモリ使用量、ドローコール数などを測定できる
- Memory Profiler(Package Managerから追加):テクスチャやメッシュ、アセットが重複してロードされていないか、非圧縮のテクスチャが残っていないかを視覚的に確認できる
体感で「カクつく」「動きがガタガタする」と感じたときはGCの発生頻度やドローコール数を、「起動や画面切り替えが重い」と感じたときはメモリ使用量を中心にチェックすると、原因を絞り込みやすくなります。
よくあるボトルネックと対処法
実際に負荷の原因として多いのは、GC(ガベージコレクション)によるスパイクと、ドローコールの多さの2つです。それぞれ対処法が異なるので、症状に合わせて見ていきましょう。
GCによるフレーム落ちが疑われる場合は、次のような対策が効果的です。
- 弾やエフェクト、敵など頻繁に生成・破棄されるオブジェクトは、事前に生成してプールに保管しておくObjectPoolを導入する
- Updateメソッド内など毎フレーム実行される処理で、
newによるリスト生成や文字列結合をしないようにし、事前に定義したフィールド変数を使い回す
ドローコールが多く描画が重い場合は、次のような対策を検討します。
- 動かないオブジェクトは「Static」にチェックを入れ、メッシュを事前に結合するStatic Batchingを使う
- 同じマテリアル・同じメッシュのオブジェクトをまとめて描画するGPU Instancingを使う(マテリアルのインスペクターで「Enable GPU Instancing」にチェックを入れる)
- カメラからの距離に応じて低ポリゴンのメッシュに切り替えるLOD Groupを設定する
スクリプトからrenderer.materialを変更すると、そのマテリアルが複製されてバッチングが無効になってしまいます。せっかくバッチングを設定しても効果が出ない場合は、複製が発生しないrenderer.sharedMaterialを使っているか見直してみてください。
テクスチャの圧縮形式も、負荷を左右するポイントのひとつです。一般的にはiOS向けにはASTC、Android向けにはETC2が使われることが多いですが、対応端末のGPU世代によって最適な形式は変わってくるため、あくまで原則として捉えておくとよいでしょう。
最後にシェーダー側の工夫として、モバイル向けには高い精度が不要な演算にfloatではなくhalf精度を使うことで、GPUの負荷を抑えられる場合があります。

すべてのプロジェクトで必須というわけではないので、ここまでの対策を終えてもまだ重さが気になる場合の選択肢として覚えておいてください。
実機テストはAndroidとiOSで何が違う?
エディタ上で動いていても、実際のスマホで同じように動くとは限りません。公開前には必ず実機での確認が必要ですが、Androidはパソコンと端末だけで完結する一方、iOSはMacとXcodeが必須という大きな違いがあります。自分の開発環境で対応できるかどうか、ここで確認しておきましょう。
Android実機テストの手順
Androidは、Windowsのパソコンだけでもテストまで完結できる手軽さがあります。まずは端末側の設定から始めます。
- Android端末の設定から「開発者オプション」を開き、「USBデバッグ」を有効化する
- パソコンとAndroid端末をUSBケーブルで接続する
- Unityの「Build Profiles」を開き、「Scene List」にテストしたいシーンを「Add Open Scenes」で追加する
- 「Build And Run」ボタンをクリックする
ビルドされたAPKデータは実機へ自動で転送され、インストール後にゲームが自動で起動します。エラーが出ずにここまで進めば、Android側の実機確認はひとまず完了です。
iOS実機テストの手順
iOSの実機テストは、Windowsのパソコンだけでは完結できません。Macを持っていない場合は、この時点で環境を用意する必要があります。
- UnityエディタでiOSプラットフォーム向けにビルドを実行し、Xcodeプロジェクトを書き出す
- Macでxcodeを起動し、書き出されたプロジェクトを開く
- MacとiOS端末(iPhoneなど)をケーブルで接続し、Xcode経由で実機にアプリを転送・インストールしてテストを行う
Unity側でビルドが完了しても、それはXcodeプロジェクトが書き出されただけの状態です。実機にインストールして動作を確認するところまでは、Macを使ったもうひと手間が必要になります。iOS向けの開発を考えているなら、早い段階でMacの用意ができるか確認しておくと安心です。
実機でテストしていると、エディタでは出なかったエラーに遭遇することもあります。ビルド関連のトラブルやよくあるエラーへの対処法は、以下の記事でまとめているので、つまずいたときはあわせて確認してみてください。
ストアに公開申請するために何を準備すればいい?
ゲームが完成しても、それだけではまだ誰にも遊んでもらえません。ストアに公開するにはアイコン画像とプライバシーポリシー、そして署名付きのビルドファイルという3つを準備して申請する必要があります。ひとつずつ順番に見ていきましょう。
アイコンを作成する
スマホの画面に表示されるアイコンは、Android Studioに搭載されている「Image Asset Studio」という無料ツールを使うと、必要な解像度をまとめて自動生成できます。
- Android Studioを起動し、新規プロジェクトを作成する
- プロジェクト上のフォルダを右クリックし、「New」→「Image Asset」を選択する
- 「Foreground Layer」と「Background Layer」のそれぞれで「Source Asset」の「Path」から元画像を選択する
- 「Next」をクリックし、確認画面で「Finish」を選択する
これで、必要な解像度のpngファイルが各フォルダに自動生成されます。手作業で解像度ごとに画像を用意する必要がないので、思ったより手軽に進められる作業です。
プライバシーポリシーを用意する
「個人情報を集めていないから自分には関係ない」と思ってしまいがちですが、これは見落としやすいポイントです。AdMobのような広告SDKを組み込んだ時点で、SDK側が情報を収集する仕組みになっているため、開発者自身が直接データを扱っていなくてもプライバシーポリシーの掲示が求められます。
- 外部ツールやジェネレーターを利用してポリシー文面を作成し、Webサイト等にアップロードして誰でも閲覧できる状態にする
- アプリのUI内に、そのポリシーページへのリンクを設置し、アプリ内からも確認できるようにする
対象年齢の設定によってプライバシーポリシーの扱いが変わるという情報もありますが、ストア側の規約は改定されることがあります。申請前には、Google PlayやApp Storeの公式ヘルプで最新の要件を必ず確認しておきましょう。
署名付きファイルを作成して申請する
最後は、実際にストアへアップロードするファイルを作る工程です。Google Playの場合は、次のような流れで進めます。
- Unityの「Player Settings」でキーストア(Keystore)を新規作成し、パスワードとエイリアスを設定してアプリに署名する
- 「Build Profiles」でビルド形式をaab(Android App Bundle)に設定し、ビルドを実行する
- Google Play Consoleのアカウントを開設する(執筆時点では初回登録時に25ドル程度の手数料がかかりますが、金額は変更される可能性があるため申請前に公式サイトで確認してください)
- Console管理画面から新規アプリを作成し、署名付きaabファイルを製品版トラックにアップロードして、ストア掲載情報を入力し審査を申請する
Androidのリリース設定については、細かい項目でつまずきやすい部分でもあります。より詳しい設定内容は以下の記事でまとめているので、申請作業に入る前に目を通しておくとスムーズです。
よくある質問
-
QMacを持っていなくてもiOS版をリリースできますか?
-
A基本的にはMacとXcodeが必須ですが、クラウド上でXcodeのビルド環境を借りられるサービスを利用すれば、手元にMacがなくてもiOS向けのビルドを進められる場合があります。ただし利用料金や対応範囲はサービスによって異なるため、本格的に導入するなら各サービスの仕様を事前に確認しておくと安心です。
-
QGoogle Play Consoleの登録費用は今も変わっていませんか?
-
A執筆時点では初回登録時に25ドル程度の手数料がかかる仕組みですが、金額や制度はストア側の判断で変更されることがあります。申請の直前に、Google Play Consoleの公式ヘルプページで最新の金額と手続き内容を確認してから進めるのが確実です。
-
Q広告を入れると審査に通りにくくなりますか?
-
A広告SDKを組み込むこと自体が、直接審査落ちの原因になるわけではありません。審査で問題になりやすいのは、広告に関するプライバシーポリシーが未整備だったり、広告の表示頻度や配置がユーザー体験を大きく損なっていたりするケースです。広告の有無ではなく、周辺の準備や表示のバランスを見直すことが判断のポイントになります。










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