ご留意ください:Photon TrueSyncとThunderの開発は停止されており、今後はアップデートもパリリースされません。既存のアプリケーションへの影響はありませんが、現在開発中のアプリケーションについてはマイグレーションを推奨しています。

TrueSync チュートリアル パート1

チュートリアルの内容

このチュートリアルのシリーズでは、Photon TrueSyncを使ってUnityでシンプルなマルチプレイヤーゲームを作る方法を説明します。Photon TrueSyncは決定論的なロックステップシステムなので、すべてのゲームコードは、すべてのクライアントコンピュータで同じ順序で実行される、離散的なステップ(これらをティックと呼びます)で実行する必要があります。これは最終的な結果が常に同じになるようにするためです。

このチュートリアルは、4つのセクションで構成され、それぞれがTrueSyncの主要概念を説明しています。各セクションの最後に、確認のためにゲームを実行してみてください:

  • セクション1:導入。ダウンロードおよびインストール。このセクションでは、ダウンロードとインストールの手順、ゲームクライアントをPhoton Cloudに接続し、ネットワーク化されたゲーム(Photonルーム)に参加させるための基本的なPhoton Unity Network(PUN)コードについて。
  • セクション2:移動するボックス。 TrueSyncManagerゲームオブジェクトの設定、TrueSyncの決定論的物理を使ったプレイヤープレハブの作成、プレイヤーを移動させるコードの追加、ゲームクライアント間の入力の同期について。
  • セクション3:発射体の射撃 。ゲームオブジェクトのインスタンス同期と破壊、敵を倒した回数、倒された回数のスコア記録について。
  • セクション4:ロールバックと状態の管理。ロールバックを使用してレイテンシーを隠す、カスタム変数やオブジェクトの状態を管理してゲーム状態のずれを回避する方法を説明します。

セクション1の内容:

Photon Cloudに接続し、別のクライアントをPhoton Roomに参加させるゲームクライアント。

TrueSyncのダウンロード

Asset Storeタブ(Unity内のWindow/Asset Store)を使用してTrueSyncをダウンロードおよびインポートしてください。「TrueSync」を検索するか、弊社の公式ストアのエントリーから「open in Unity」をクリックしてください。

Unityから開くと、ダウンロードして現在のプロジェクトにインポートするオプションが表示されます。これは新しく作成したプロジェクトで行ってください。

TrueSync import window
TrueSyncを新規プロジェクトにインポートする。

TrueSyncにはPUN(Photon Unity Networking)の最新バージョンが含まれています。 PUNは、ゲームクライアントをPhoton Roomsに接続し、TrueSyncに必要な通信システムを提供するために使用されます。

PUNの設定

TrueSyncを使用するにはPhotonアカウントが必要です。まだアカウントを作成していない場合は Photonのウェブサイト から作成してください。アカウント内で、このチュートリアルで使用する新しいApp IDを作成してコピーします。

Unityのプロジェクトタブに行き、 "Photon Unity Networking / Resources"の "PhotonServerSettings"アセットをクリックしてください。AppID(photonengine.comアカウントで作成したもの)を入力し、ホスティングリージョンを選択します(下記の図のように、best regionを使用することをお勧めします)。

PUN settings
PUN設定アセット

「Auto-Join Lobby」にチェックを入れることを忘れないでください。これにより、下記セクションで行う内容が容易になります。

次に、ゲームが始まる際にPUNをPhoton Cloudに接続させるためのコードを使用しましょう。

ルームの接続と参加

Unityでシーンを作成し、「Tutorial」という新しいフォルダ下に「Menu」として保存します。

基本的なPUN接続とルームの作成にこのシーンを使用します。空のC#スクリプトを作成し、上記と同じフォルダに "TutorialMenu.cs"という名前で保存します。

Project tab with scene and script
シーンとスクリプトを含むプロジェクトタブ。

次に、 "TutorialMenu.cs"スクリプトを "Menu"シーンのゲームオブジェクトにつけてください。以下の図では、カメラに取り付けられています。

Script attached to camera
カメラに添付されたスクリプト。

TutorialMenu.csを開き、スクリプトを "PunBehaviour"クラスから継承させて、提供された "Start()"メソッドの中に次のコードを入力します。

C#

using UnityEngine;
using System.Collections;

public class TutorialMenu : Photon.PunBehaviour {

    void Start () {
        PhotonNetwork.ConnectUsingSettings ("v1.0");
    }

}

このコードは、前のセクションで選択した設定を使用してPhotonに接続します。 Photon Serverに接続してロビーに参加した後(PUNをロビーに自動参加するように事前に設定しています)、PUNはゲームルームの作成や参加に使用できるコールバックを実行します:

C#

public override void OnJoinedLobby() {
    PhotonNetwork.JoinOrCreateRoom ("room1", null, null);
}

このコードは、PUNをランダムなルームに参加させたり、まだ存在しない場合は作成します。ルームの作成/参加の様々なオプションについてはPUNのドキュメントから確認できますが、このチュートリアルではこれで十分です。

シーンの読み込み

ルームが正しく作成されて参加されると、Photonは別のコールバックを実行し、これを使用してルームに接続されたすべてのクライアントで同時にシーンの負荷を調整します。

メニューシーンを、TrueSyncによって調整された確定的なロックステップセッションが起こるゲームシーン分離から分けました。

新しいシーンを作成し、それを「Game」と名付けてください。このチュートリアルの他のファイルと同様 "Tutorial"フォルダに保存してください。次に、 "TutorialMenu.cs"スクリプトに戻り、次のコードを追加します。

C#

void OnGUI() {
    GUI.Label (new Rect(10, 10, 100, 30), "players: " + PhotonNetwork.playerList.Length);

    if (PhotonNetwork.isMasterClient && GUI.Button (new Rect (10, 40, 100, 30), "start")) {
        PhotonNetwork.automaticallySyncScene = true;
        PhotonNetwork.LoadLevel ("Tutorial/Game");
    }
}

これにより、マスタークライアント(ルームを作成したクライアント)のプレイヤーは、Photonにルームに接続されているすべてのクライアントでゲームシーンを同時にロードするようにリクエストできます。 また、現在何人のプレイヤーがルームに接続しているかを示します。

テストの実行

両方のシーン (Tutorial/Menu とTutorial/Game) がビルド設定に含まれていること、また、Tutorial/Menuが最初のシーン(起動時にUnityが読み込むもの)であることを確認してください。

Build settings
ビルド設定。

選択したビルドを作成し、その一つ、または二つのコピーを実行して、Unityエディタ内からメニューシーンを実行します。 両方のクライアントがPhotonに接続して、マスタークライアントでstartを押した後に空のゲームシーンを読み込みます。

ここでセクション2に移動して、ネットワーク上でプレイヤーキャラクターをコントロールする方法を学びましょう。

Back to top