Unity ネットワークゲーム開発 実践入門 UNET/ニフティクラウド mobile backend版
西森 丈俊、一條 貴彰、掌田 津耶乃
ネットワーク機能でランクアップをめざそう!
- 定価
- 2,948円(本体価格 2,680円)
- 発売日
- 2017年6月20日
- 判型/ページ数
- B5変形/408ページ(オール4C)
- ISBN
- 978-4-8026-1099-5
ネットワークゲーム開発の最初の一歩!
Unity標準のネットワークAPIである「UNET」(正式名:Unity Multiplayer)やmBaaSの1つである「ニフティクラウド mobile backend」を使った、リアルタイム型、非リアルタイム型のネットワークゲーム開発の解説書。
ネットワークゲーム開発がはじめての方でも学んでいただけるように、サンプルプログラムを使って基礎からていねいに解説しました。また、開発のヒントやTIPSも多数掲載し、現場ですぐに役立ちます。
本書の特徴
●本格的な対戦型リアルタイム・ネットワークゲーム「Painters」、非リアルタイム型ネットワーク対応ゲーム「剣士なんですぐ死んでしまうん?」の2本のサンプルゲームを掲載
●サーバーへのセーブデータ保存やスコアランキング、そしてソーシャルゲームでおなじみのフレンドシステムなどを、既存のゲームに実装する方法がわかる
●Unity標準の「UNET」の概要から基礎までをサンプルを使いながら、ステップバイステップで学べる
●リアルタイム型ネットワークゲームで必須となる遅延回避やキャラクターの移動予測などの実践的なテクニックを習得できる
●Unity Cloud Buildなど開発効率を上げるTIPSやヒントを多数掲載している
序章 Unityとネットワークゲームの概要
0-1 統合ゲーム開発環境Unityのおさらい
0-2 ゲームのネットワーク機能とは?
0-3 本書のサンプルゲームについて
0-4 必要な開発環境とUNETのライセンス
Part1 非同期型ネットワーク機能活用-NCMB編
1章 サンプルゲームの概要と構造
1-1 「剣士なんですぐ死んでしまうん?」の概要と遊び方
1-2 サンプルゲームの構造
2章 NCMBの導入と基礎
2-1 「ニフティクラウド mobile backend」とは
2-2 NCMB Unity SDKの導入手順
2-3 NCMBの管理画面
2-4 データ保存・取得の基礎
3章 ログイン機能の実装と活用
3-1 ゲームとログイン機能の関係
3-2 ログイン機能の実装
3-3 ログイン機能の応用とセーブデータの保存
3-4 オートログイン
3-5 端末引き継ぎ機能
3-6 デイリーボーナス
4章 ネットワーク機能の拡張
4-1 データストアのおさらい
4-2 ランキング機能
4-3 フレンド機能
4-4 非同期型マルチプレイのゲームシステム
4-5 ゲームの設定を管理画面から変更する
5章 画像ファイルの保存と取得
5-1 ファイルストアへ画像ファイルを保存する
5-2 ファイルストアから画像ファイルを取得する
5-3 アプリ内でスクリーンショットを共有・閲覧する
5-4 バナー画像を管理画面からアプリに配信する
6章 プッシュ通知の実装と活用
6-1 ゲームにプッシュ通知を組みこむ
6-2 プッシュ通知の準備-UnityとNCMB編
6-3 プッシュ通知の準備-iOS編
6-4 プッシュ通知の準備-Android編
6-5 管理画面からプッシュ通知を配信する
6-6 アプリからプッシュ通知を配信する
Part2 リアルタイム・ネットワークゲーム開発-UNET基礎編
1章 Network Managerで超簡単ネットワークゲーム!
1-1 ネットワークゲームとUNETの基礎
1-2 Network Managerを使ってシーンを作成する
1-3 キャラクターをプレファブとして作成する
1-4 キャラクターを操作するためのスクリプトを記述する
1-5 キャラクターを操作するスクリプトの詳細
1-6 仕上げとまとめ
2章 Network Managerを使ったプログラミング
2-1 ステータスの同期
2-2 クライアント間での値の共有
2-3 NetworkManagerクラスを利用する
2-4 プレイヤーオブジェクトの操作
2-5 ネットワークメッセージを利用する
3章 UNETをカスタマイズする
3-1 プレイヤーが集まる場所「ロビー」の使い方
3-2 NetworkManagerクラスを拡張する
3-3 NetworkLobbyManagerクラスを拡張する
3-4 実行中のユーザーを調べるネットワークディスカバリー
4章 Transport Layer APIとインターネットサービス(Unity Cloud Service)
4-1 Transport Layer APIを使ったメッセージの送受信
4-2 インターネットサービス(Unity Cloud Services)を利用する
Part3 リアルタイム・ネットワークゲーム開発-UNET実践編
1章 ネットワークゲームの基本とサンプルゲームの概要
1-1 UNET(Unity Networking API)のおさらい
1-2 サンプルゲーム「Painters」の概要と遊び方
2章 サンプルゲーム「Painters」の実装の概要
2-1 ネットワークゲーム開発の基本
2-2 「Painters」での実装
3章 ゲーム時間の共有
3-1 遅延処理の概要
3-2 通信の設計と実装
4章 キャラクター移動の補正
4-1 キャラクター移動処理の概要
4-2 キャラクター移動処理の実装
4-3 キャラクター移動処理の補完と予測
5章 ペイント弾の同期と背景の塗りつぶし
5-1 ペイント弾を同期する
5-2 背景の塗りつぶし
Appendix
A-1 iOSアプリ開発のための証明書発行
A-2 Unity Cloud Buildでアプリをビルドする
A-3 NCMBのそのほかの機能
A-4 マルチプレイネットワークゲーム用のミドルウェア「Photon」
ダウンロードデータ
本書で解説したサンプルデータをダウンロードできます。
なお、使用方法などに関しては、必ず書籍の該当箇所をご確認の上、ご利用ください。
ダウンロード後、解凍したファイル内に「readme.txt」ファイルなどが含まれる場合は、使用前にこちらもご確認ください。
- Part1のサンプルプログラム(約160MB)
- Part2のサンプルプログラム(約6MB)
- Part3のサンプルプログラム(約21MB)
(サンプルプログラムはzip形式で圧縮してありますので、ダウンロード後解凍してください)
正誤情報
- 2017.07.21当書籍について、現在記述ミスが発見されております。 大変ご迷惑をおかけしますが、以下をご参照いただきますよう、よろしくお願いいたします。
- 2017.07.21Part2のサンプルプログラムに補足情報があります。
当書籍について、現在記述ミスが発見されております。 大変ご迷惑をおかけしますが、以下をご参照いただきますよう、よろしくお願いいたします。
87ページの上のリストの1行目
誤:CreateOwnCoroutine
↓
正:CreateOwnDataCoroutine
136ページのSaveScreenShot.cs
本書のサンプルスクリプトはUnity 5.6.0f3にて動作確認を行っております。
その後リリースされたUnity 5.6.2f1環境では、スクリーンショットのキャプチャ時に画像が壊れる現象を確認しました。
本現象は、Cameraコンポーネントの「Allow HDR」チェックボックスを入れている場合、OnPostRender()が呼び出されるタイミング時点では描画が完成されていないことに起因します。
解決法は2通りです。
●カメラから「Allow HDR」のチェックを外す
ゲームがHDRレンダリングを行わない場合、これで問題が解決します。
●OnRenderImage()のタイミングでキャプチャ処理を行う
HDRレンダリングを行いつつキャプチャをする場合は、OnRenderImage()の処理タイミングでキャプチャ処理を行います。
その際、一度Graphics.Blitを呼ぶ必要があります。
void OnRenderImage(RenderTexture source, RenderTexture destination)
{
Graphics.Blit(source, destination);
if (screenCaptureFlag)
{
Texture2D texture = new Texture2D(source.width, source.height, TextureFormat.ARGB32, false);
texture.ReadPixels(new Rect(0, 0, source.width, source.height), 0, 0);
texture.Apply();
SaveTexureToFileStore(texture);
screenCaptureFlag = false;
}
}
Part2のサンプルプログラムに補足情報があります。
リスト2-1-1について(215ページ)
Startメソッドが省略されていますが、この部分は、後にあるリスト2-2-1のStartと同じ内容になります。そちらのメソッドの内容をそのままコピー&ペーストしてご利用ください。
=====
Moveメソッドが省略されていますが、それ以前のリストで掲載されていませんでした。これはカメラを追随して動かすもので、ネットワークとは特に関係はなく、本文には影響はありません。
本書で使ったサンプルでは、以下のようなコードになっていました。サンプルを作成される際には以下のように記述してください。
[ClientCallback]
void Move()
{
if (!isLocalPlayer) { return; }
Vector3 v = transform.position;
v.z -= 5;
v.y += 3;
Camera.main.transform.position = v;
}
お問い合わせ
本書に関するお問い合わせは、下記のボタンをクリックしてお問い合わせフォームよりお問い合わせください。