イントロダクション
PUN BasicチュートリアルはUnity基づいたチュートリアルです。
Photon Cloudによって動作する、独自のマルチプレイヤー対応アプリケーションを開発する方法や、アニメーターによるアニメーションを使用したキャラクターを使う方法を説明します。
重要な機能や、PUNによるネットワークベースの開発を理解するためのヒントを学びます。
概要
このチュートリアルでは、空のプロジェクトから始めて、作成プロセス全体を順番に説明します。
概念や、通常は見落としがちな点、ネットワークゲームを設計するうえでの検討事項を説明します。
プレイヤーが歩き回るだけのゲームではなく、基本的な発射システムとプレイヤーの体力管理を実装します。これはネットワークを介して、様々な同期について説明をするのにも役立ちます。
また、ルーム内のプレイヤーの数にもとづいてカスタムの大きさのアリーナを使用します。現在プレイしているプレイヤーの数に合わせてアリーナのサイズが調整されます。
シーンの自動的な同期機能に関連するいくつかの概念、様々なシーンを読み込む際のプレイヤー処理に関するヒント、そのような状況で起こり得る問題について説明します。
ゲームの目的
ゲームを起動すると、ユーザーは接続プロトコルを確認し、UI自体の進捗を把握できます。
ルームが参加または作成されると、プレイヤーは最大4人のプレイヤーが一度に存在できるアリーナに入り、このアリーナはサイズ調整が可能です。
プレイヤーは走ったり、方向転換や発射ができます。各プレイヤーが発射したビームが他のプレイヤーに当たるとそのプレイヤーの体力に影響を与えます。
体力が0になるとゲームオーバーになりアリーナから退出します。その後、情報画面が再表示され、希望に応じて新しいゲームに参加することができます。
知っておくべきこと
このチュートリアルでは、Unity Editorとプログラミングの基本のみを前提としています。
ただし、通常の非ネットワークゲームの作成に関する知識や経験があると、Photon Networkingで導入された新たな概念をより効率的に活用できるでしょう。
サンプルコードはC#で記述されていますが、Unity Scriptでも同様に動作します。
Photon Cloud
新しいUnityプロジェクトの作成
Unity4.7またはUnity5のいずれかのバージョンを使用してください。
チュートリアルを行う際は通常、新しいプロジェクトを作成することをお勧めします。
コンセプトや設計パターンを理解したら、それらを独自のプロジェクトに適用してください。
PUNのインポートとセットアップ
AssetStoreを開き、PUNアセットを探してダウンロード/インストールします。
すべてのPUNアセットをインポートしたら、Unityでリコンパイルします。
PUNセットアップウィザードはネットワーク設定をサポートし、
マルチプレイヤーゲームを開始するための便利な方法であるPhoton Cloudを提供します!
Cloudはゲームに使用できる
Photonサーバーを集めたものです。
後ほど説明します。
「無料プラン」のCloudを使用すれば気軽に始められます。メールアドレスを入力して、後はウィザードに任せましょう。
新しいアカウントはすぐに 「AppID」を取得します。メールアドレスが既に登録されている場合は、ダッシュボードを開くように求められます。
ログインして、AppIDを入力フィールドに貼り付けます。
AppIDが保存されたらこの手順は完了です。
「Photon Cloud」では何ができますか?
基本的には、「Photon Cloud」とはPhotonServerが実行されているマシン群です。
このサーバーの「Cloud」はExit Gamesによって維持され、 マルチプレイヤーゲーム開発に役立つサービスとして提供されます。
サーバーはオンデマンドで追加されるので、 プレイヤー数に上限はなく対応可能です。
Photon Cloudは完全に無料ではありませんが、 通常のホスティングに比べて低価格でご利用できます。
価格設定については、 こちらをご覧ください。
Photon Unity NetworkingがPhoton Cloudを処理しますが、 内部での現象を簡単に説明します:
全員がまず最初に「ネームサーバー」に接続します。
ネームサーバーは、クライアントがどのアプリケーション(AppIDで)とリージョンを使用するのかを確認します。
その後、ネームサーバーはクライアントをマスターサーバーへ転送します。
マスターサーバーは、複数のリージョナルサーバーのためのハブで、すべての既存のゲームを把握しています。
ゲーム(ルーム)が作成または参加されると、クライアントは 「ゲームサーバー」と呼ばれる、他のいずれかのマシンに転送されます。
PUNの設定は非常に簡単で、ホスティング費用やパフォーマンス、
メンテナンスを気にする必要は一切ありません。
ルーム
Photon Cloudは「ルームベースのゲーム」で構築されます。 つまりマッチごとにプレイヤーの数が制限され(10以下など)、他のプレイヤーからは区別されます。
ルーム内では通常、他のプレイヤーが送信した情報を 全員が受信します。
ルーム外ではプレイヤー同士は通信できないため、 できるだけ早くプレイヤーがルームに入るようにするべきです。
ルームに入る最良の方法は、ランダムマッチメイキングを使用することです。
サーバーにより、任意のルームまたは特定のプロパティを持つルームが選択されます。
すべてのルームには識別子として名前が付けられています。
ルームが満室または終了していない限り、名前を指定して参加することができます。
マスターサーバーは、そのアプリケーション向けのルームリストを提供します。
ロビー
アプリケーションのロビーはマスターサーバー上に存在して、ゲームのためのルームリストを表示します。
この例ではロビーを使わず、利用可能な場合はランダムなルームに参加し、参加できる既存のルームが無い場合は新規データを作成します(ルームの定員に上限がある場合があります)。
アプリケーションIDとゲームバージョン
全員が同じサーバーに接続する場合、自身のプレイヤーを他者のプレイヤーから区別する必要があります。
各ゲーム(つまりアプリケーション)はCloud内で独自の 「AppID」を取得します。
プレイヤーは、自身のクライアント内で同じ「AppID」を持つプレイヤーとのみ接触します。
古いクライアントのプレイヤーと新しいクライアントのプレイヤーを分離するために使用できる、「ゲームバージョン」もあります。
リージョン
Photon Cloudは、非常に遠くにいるプレイヤーとの接続不良を防ぐために、世界中の個別のリージョンで構成されています。
異なるリージョンのリモートチームと作業を行っている場合は、特にこの概念を理解しておく必要があります。
チームメートとゲームの検証を行う際、リージョンの分割が原因でテストできない可能性があります。
このため、やりとりが発生するすべてのテスター同士のリージョンが同じになるよう、強制的に設定してください。
開発
各セクションではプロジェクトの開発段階の特定の部分を説明するため、これらのセクションを順番に進めることが重要です。
スクリプトとPhotonに関する知識レベルも、段階的に上がるようになっています。
- ロビーシーンの作成
- ユーザーインターフェース(UI)を使用してロビーシーンを向上
- ゲームシーンの作成
- レベルローディングの実装
- 基本的なプレイヤープレハブの作成
- プレイヤーのカメラワーク
- プレイヤーネットワーキング
- プレイヤーのインスタンス化とシーンの切替
- プレイヤーのユーザーインターフェース(UI)
まとめ
これで、ユーザの体験を向上させるための基本的な要件を満たし、インターネット上でユーザ同士が対戦できるシステムを作成することができました。
ここまででPUNの管理方法、PUNのステータスや現在のコンテキストをリッスンする方法、簡単にAnimatorを使うために直感的なコンポーネントを最大限に生かす方法を学びました。
また、自動シーン同期のようなPhotonの機能を使用して、強力つ独創性の高いGamePlayを作成する方法についても習得しました。
一般ユーザーが利用できるゲームを完成させるにはさらに多くの作業が必要となりますが、ここまでの説明でゲームの基盤は整っています。
- 「はじめに」セクションを参照したことを確認してください。
- ドキュメントやAPIリファレンスを参照し、利用可能な機能を確認してください。
すぐに必要ではなくても、学んでおくと役立つことがあるでしょう。
新しい機能の実装を行う際などに、関連性のある関数やプロパティを思い出すかもしれません。 - フォーラムでは、お気軽に関心や問題を共有してください。 問題による停滞は避けるべきです。
他のユーザーと問題を共有することで状況を整理でき、解決に近づけます。
ユーザーによって経験やUnityやPUNに関する知識は異なりますので、どのような内容でも気兼ねなく投稿してください。