🐷

【初心者向け】UnityのWebリクエストとサーバー連携入門

2025/01/21に公開

【初心者向け】UnityのWebリクエストとサーバー連携入門

Unityでゲームやアプリを作っていると、「オンラインランキングを表示したい」「外部のAPI(天気情報など)をゲーム内で表示したい」といったシーンが出てきます。そこで必要になるのが、Webリクエストによるサーバーとの通信です。本記事では、初心者向けに次のような内容をまとめています。

Unityの基本操作からC#スクリプトの基礎まで、やさしく学べる入門チュートリアルはこちら
https://zenn.dev/ryuryu_game/books/fd28de9d8e963a

1. Webリクエストで何ができるの?

サーバーとの通信が可能になると、ゲームやアプリに以下のようなオンライン要素を盛り込めます。

  1. スコア保存・ランキング機能

    • スコアをサーバーに送信して保存(POST)
    • ランキング情報を取得して表示(GET)
  2. ユーザー管理・ログインシステム

    • ID・パスワードによる認証
    • セッションIDやトークンでログイン状態を管理
  3. 動的なコンテンツ更新

    • イベント情報やキャラクター性能をサーバー側で管理し、リアルタイムにゲームへ配信
    • クライアント更新不要でバランス調整ができる(サーバーサイド修正)
  4. 外部サービス連携

    • SNS投稿機能や、天気/ニュースなどのAPIをゲーム内で利用
    • マルチプレイ対応(ロビー管理、チャットなど)

2. Webリクエストとは? ~手紙と郵便局の例えで考える~

2-1. 例え話:手紙と郵便局

  • あなた(クライアント):手紙を書いて相手に送りたい人(ゲームやアプリ)
  • 送り先(サーバーURLやIPアドレス):手紙の宛先住所
  • 郵便局(インターネット):手紙を届けてくれる仕組み
  • 相手(サーバー):手紙を受け取り、返事をくれる存在
  1. 手紙(リクエスト)を作成

    • たとえば「○○の情報をください」「このスコアをサーバーに保存してください」といった内容を書く。
    • Unityなら UnityWebRequest.Get("https://example.com") などでリクエストを生成するイメージ。
  2. 手紙を出す(リクエスト送信)

    • SendWebRequest() を呼び出すと、郵便局(ネットワーク)が宛先(サーバー)へ届けてくれる。
  3. 相手(サーバー)が受け取る

    • 手紙の内容を確認し、「OK、情報を返そう」「このデータを保存しよう」という処理を行う。
    • 返事(レスポンス)は文字列やJSON形式などで書かれてくる。
  4. 返事(レスポンス)が戻ってくる

    • 再び郵便局を通じて、あなた(Unityアプリ)のもとへ返ってくる。
    • 受け取った内容は downloadHandler.text などで確認して、ゲーム内に反映する。

3. UnityでWebリクエストを行う方法

Unityでは UnityWebRequest というクラスが推奨されています。非同期処理に対応するため、コルーチンIEnumerator)を使うのが一般的です。以下では、よく使われるGETとPOSTのコード例を見ていきましょう。

3-1. GETリクエスト

GETリクエストは「サーバーから情報を取得する」処理に使われます。たとえば、ランキング情報やユーザーデータをサーバーから持ってくるときに利用します。

using UnityEngine;
using UnityEngine.Networking;
using System.Collections;

public class WebRequestGetExample : MonoBehaviour
{
    private void Start()
    {
        // ゲーム起動時にコルーチンを呼び出し、サーバーからデータを取得してみる
        StartCoroutine(GetDataFromServer("https://example.com/api/data"));
    }

    // サーバーからデータを取得するコルーチン
    IEnumerator GetDataFromServer(string url)
    {
        // using構文でUnityWebRequestを自動解放
        using (UnityWebRequest webRequest = UnityWebRequest.Get(url))
        {
            // リクエスト送信。完了まで待機する
            yield return webRequest.SendWebRequest();

            // 通信結果を判定
            if (webRequest.result == UnityWebRequest.Result.ConnectionError ||
                webRequest.result == UnityWebRequest.Result.ProtocolError)
            {
                // 通信失敗時のエラーメッセージ
                Debug.LogError("GET Error: " + webRequest.error);
            }
            else
            {
                // 通信成功時のレスポンス(文字列)を取得
                string receivedData = webRequest.downloadHandler.text;
                Debug.Log("GET Received Data: " + receivedData);

                // 必要に応じてJSON解析などを行い、ゲーム内に反映する
            }
        }
    }
}

3-2. POSTリクエスト

POSTリクエストは「サーバーにデータを送信する」処理に使われます。たとえば、プレイヤー名やスコアをサーバーに保存したい場合などに利用します。

using UnityEngine;
using UnityEngine.Networking;
using System.Collections;

public class WebRequestPostExample : MonoBehaviour
{
    private void Start()
    {
        // テストとして、ユーザー名"Player1"とスコア100をサーバーに送ってみる
        StartCoroutine(SendDataToServer("https://example.com/api/saveScore", "Player1", 100));
    }

    // サーバーへデータを送信するコルーチン
    IEnumerator SendDataToServer(string url, string userName, int score)
    {
        // 送信したい情報をWWWFormにまとめる
        WWWForm form = new WWWForm();
        form.AddField("username", userName);
        form.AddField("score", score);

        // using構文でUnityWebRequestを自動解放
        using (UnityWebRequest webRequest = UnityWebRequest.Post(url, form))
        {
            // リクエスト送信。完了まで待機する
            yield return webRequest.SendWebRequest();

            // 通信結果を判定
            if (webRequest.result == UnityWebRequest.Result.ConnectionError ||
                webRequest.result == UnityWebRequest.Result.ProtocolError)
            {
                // 通信失敗時のエラーメッセージ
                Debug.LogError("POST Error: " + webRequest.error);
            }
            else
            {
                // 通信成功時のレスポンスを取得
                string response = webRequest.downloadHandler.text;
                Debug.Log("POST Response: " + response);

                // サーバーが返したメッセージを解析して、処理を続行する
            }
        }
    }
}
  • WWWForm を使うことでフォーム形式でデータを送る
  • サーバーがJSONやテキストでレスポンスを返してくれれば、downloadHandler.text で受け取って解析できる

4. JSON形式と通常テキストの違い

4-1. JSON形式とは?

  • JSON(JavaScript Object Notation) は、{ "key": "value" } のように キーと値のペアでデータを表すルール。
  • 例:
    {
      "username": "Alice",
      "score": 1000
    }
    

4-2. なぜJSONが便利なのか?

  • 厳密なフォーマットがあるため、プログラムで解析しやすい
  • 多くの言語(C#、JavaScript、Pythonなど)で標準的なパースライブラリが用意されている
  • XMLに比べて記述がシンプルで可読性が高い

4-3. 通常テキストとの違い

  • 「ただの文章」だと、どこがスコアでどこが名前なのか、独自の区切り文字などを決めないといけない
  • JSONならキーと値が明確なので、データの受け渡しを機械的に自動処理できる

5. サーバーをどう立ち上げる?(Mac・クラウド・自宅PC)

5-1. MacOSでの開発用サーバー

  • ローカルサーバーとしてNode.jsやPython、ASP.NET Coreなどを起動するのは簡単
  • UnityのプロジェクトをMacOS上で開発しながら http://localhost:3000 などにアクセスしてテストできる
  • あくまで「ローカル開発・テスト用」なら手軽

5-2. インターネット越しに公開する場合

  • クラウドサービス(AWS, GCP, Azureなど)で仮想マシンやコンテナを立ち上げるのが一般的
  • 自宅PCを24時間稼働させる方法もあるが、セキュリティや管理負荷が高く推奨されない
  • VPS(Virtual Private Server)を契約して運用する方法もある

5-3. サーバーサイドでの処理

  • Node.js / Python / C# (ASP.NET Core) / Ruby on Rails / PHP など、好きな言語でAPIを実装
  • UnityWebRequest側から GET / POST でアクセスし、サーバー内のデータベースに保存したりレスポンスを返したりできる

6. PlayFabのようなBaaSを使うメリット

6-1. PlayFabとは?

  • Microsoftが提供するBaaS(Backend as a Service)
  • ユーザー管理データ保存リーダーボード課金機能などをひとまとめに提供
  • 「サーバー構築」「データベース管理」といった負担を大幅に削減

6-2. 具体的にできること

機能 概要・具体例
ユーザー認証・管理 - ゲストログイン、SNSログイン(Facebook・Googleなど)、デバイスID連携など、多様な認証方法をサポート
- ユーザーIDやパスワードのセキュリティ管理
データ保存 - ユーザー固有のセーブデータや汎用データをPlayFabのクラウド上に格納
- ユーザーデータの読み書きやバージョン管理も可能
リーダーボード - スコアやレベルなどをサーバー側で集計し、ランキングとして表示
- 日次や週間など、期間限定リーダーボードの作成も簡単
課金・購入処理 - Apple App Store / Google Play / Steamなどのストア決済をPlayFabが検証
- 成功時にゲーム内通貨やアイテムをユーザーへ付与
クラウドスクリプト - サーバー側で動くカスタムスクリプトを柔軟に追加可能
- ゲーム固有のロジック(例:アイテム生成やイベント管理など)を実装できる
イベント&アナリティクス - ユーザー行動やゲーム内イベントを追跡・可視化
- どのタイミングでユーザーが課金・離脱したかなど、詳細な分析が行える
マルチプレイサポート - リアルタイムマルチプレイのマッチメイキングやロビー管理(Photonなどと合わせて利用するケースが多い)
- ライブオペレーションと組み合わせて柔軟なゲーム運営が可能

6-3. 課金機能は実装できるのか?

  • 結論:可能
  • AppleやGoogle Playなどの決済フローと連携し、実際のお金のやり取りは各ストアが担当
  • 決済結果をPlayFabが受け取り、ユーザーのアカウントにアイテムや仮想通貨を付与
  • 手作業でサーバー実装を行うより、はるかに早く安全に構築しやすい

まとめ

  1. Webリクエストを「手紙と郵便局」に例えるとイメージしやすい
  2. UnityWebRequest でサーバー通信を行い、GET/POST などのHTTPメソッドを使い分ける
  3. 通信完了を待つため、コルーチン(IEnumerator を活用する
  4. JSON形式 はプログラム同士がデータを交換しやすいフォーマット
  5. サーバー構築 はローカル開発ならMacやWindowsでもOK。本番はクラウドが無難
  6. オンライン機能(ランキング、ユーザー管理、課金など)を実装するにはサーバーやBaaSの利用が必須
  7. PlayFab のようなBaaSを使うと、サーバー管理の負担を大幅に減らせる

オンライン要素を扱うには、サーバーサイドやネットワークの基礎知識も必要になりますが、まずは「手紙を出して返事をもらう」という感覚でWebリクエストを体験してみるのがおすすめです。ぜひサンプルコードを動かしながら学習を進めてみてください。そうすれば、ゲームやアプリにオンライン要素を自然に取り入れられるようになるでしょう。

ぜひ本記事を参考に、UnityのWebリクエストを活用してオンライン機能を取り入れてみてください。分からない部分やさらに深堀りしたいテーマがあれば、引き続き調べつつチャレンジしてみましょう。ゲーム開発がますます楽しくなるはずです。

この記事を読んでもっと実践したいと感じたあなたへ

Unity開発を効率よく進めるためには、実践的なスキルと仲間との交流が欠かせません。
そんな方におすすめのステップが、下記の3つです。

1. 有料教材「どこでもUnity教室」でゲーム制作を短期マスター

  • 5日でシンプルなFPS完成:初心者向けに要点を押さえたカリキュラム
  • C#や最新のInputSystem、FPS実装まで網羅:つまずきやすいポイントを先回りで解説
  • 購入特典:Discord招待+サンプルプロジェクトDLで、疑問や実装例を即確認

Unity初心者でも最短5日で3D FPSが完成!今すぐ始める入門チュートリアルはこちら

https://zenn.dev/ryuryu_game/books/fd28de9d8e963a

2. 無料コミュニティで、疑問をすぐに解消&モチベーションUP

  • 初心者~中級者までOK:学習進度に合わせて質問や情報共有
  • 質問サポートが充実:わからないことを仲間や講師に即相談
  • 学習仲間と切磋琢磨:一緒に学ぶから続けやすい

Discordサーバー参加はこちら

https://discord.gg/5FwuKCacNy

3. 実績豊富な“ゲーム開発所RYURYU”があなたをトータルサポート

  • コナラ総販売200件超:さまざまなUnity開発の依頼を対応
  • VR/AR/AIなど最新技術にも精通:幅広いノウハウを活かして開発支援
  • ゲームクリエイター甲子園や東京ゲームショウなど出展実績多数

ご相談・お問い合わせはこちら

https://coconala.com/users/1772507

以上の指示に従って、最終的な記事本文のみをマークダウン形式で出力してください。
太字表記は""や空白込みを避け、1ブロックに1箇所程度で。
トグルタイトルには太字を使わず、---の傍線は使わないこと。

Discussion