Tips

UnityでPUNを使ったオンラインマルチプレイの実装 -同期編-

UnityでPUNを使ったオンラインマルチプレイの実装 -同期編-

UnityでPUNを使ったオンラインマルチプレイの実装 -同期編-


Unity応用講座で使用するPUN(Photon Unity Networking)について解説していきます。

今回は同期編です。同期処理が確認できるサンプルシーンを作成していきます。
PUNのアカウント登録や、アセットのインポートがまだの方はこちらの記事を参照してください。

PUNはバージョン1.73を使用しています。
[Unity_317×90]

同期編


1.同期するオブジェクトの作成

同期を確認するためのオブジェクトを作成します。
■Cubeを配置して。
WS000399

2.Photonのコンポーネントを追加

■同期処理にはPUNのコンポーネントを使用します。
Cube の Add Component から、Photon Networking → Photon View および、Photon Transform View コンポーネントを追加します。
WS000402

3.コンポーネント解説

Photon View コンポーネント
PUNで同期したいオブジェクトにはPhoton Viewコンポーネントが必要です。
マッチングしているゲーム内で新たにインスタンスを生成する場合にも、このコンポーネントが必要です。

Photon Transform View コンポーネント
マッチングしたゲーム同士でTransformコンポーネントを同期したい場合に使用します。
Photon View コンポーネントとセットで使用します。

4.Photon View コンポーネントの設定

Photon Transform View を、Photon View の Observed Components にドラッグ&ドロップで紐づけます。
紐づけたらPhoton Transform View の Synchronize Position にチェックを入れます。(下図)
WS000404

今回は位置だけを同期するのでSynchronize Position のみで大丈夫です。加えて回転やスケールも同期する必要があればその他の項目にもチェックを入れるひつようがあります。

5.RigidBodyをアタッチ

■RigidBodyもアタッチしておきます。
※Use Gravity のチェックは外しておきます。
WS000408

6.プレハブ化

ProjectビューにResourcesフォルダを作成し、Cubeをドラッグ&ドロップしてプレハブ化しましょう。
※Photonを使用したマッチング環境へインスタンス化は、オブジェクトをResourcesフォルダ内で管理する必要があります。
WS000407

プレハブを作成したら、ヒエラルキーのCubeは削除しておきましょう。

7.マッチング環境にオブジェクトを生成するスクリプトを作成

■左クリックでCubeのインスタンスを生成するスクリプト(解説はコメントにて)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using UnityEngine;
using System.Collections;
 
public class NetWork_02 : MonoBehaviour {
 
    void Update() {
 
        // 生成位置をランダムな座標にする
        float x = Random.Range(-10f, 10f);
        float y = Random.Range(-10f, 10f);
        float z = Random.Range(-10f, 10f);
        Vector3 pos = new Vector3(x, y, z);
 
        // 左クリックをしたらマッチング環境にCubeのインスタンスを生成する
        if (Input.GetMouseButtonDown(0)) {
 
            // 第1引数にResourcesフォルダの中にあるプレハブの名前(文字列)
            // 第2引数にposition
            // 第3引数にrotation
            // 第4引数にView ID(指定しない場合は0)
            GameObject obj = PhotonNetwork.Instantiate("Cube", pos, Quaternion.identity, 0);
 
            // 生成したオブジェクトに力を加える
            Rigidbody objRB = obj.GetComponent<Rigidbody>();
            objRB.AddForce(Vector3.forward * 20f, ForceMode.Impulse);
        }
    }
}

8.スクリプトの適用

空のオブジェクト(NetworkManager)を用意して、作成したスクリプトをアタッチしましょう。
前回作成したスクリプトもアタッチしてあります。
WS000409

9.ビルド

PC環境向けにビルドします。
WS000410

10.同期の確認

ビルドして作成されたexeファイルと、UnityEditerの両方でシーンを再生してみましょう。
片方で生成したオブジェクトが、もう片方の環境でも確認できれば成功です。
(若干遅延がありますが、コンポーネントの細かい設定がデフォルトのままなのでしょうがないとします←)
unity_network_1

同期編は以上です。

次回は、ルームオプション編です。
ルーム作成時のオプション設定方法について確認していきます。

ゲーム制作関連のオススメ連載リンク

とっても手軽なゲーム制作体験!
Unityゲーム開発基礎

実際のリリースゲームを題材にしたハンズオンゲーム制作連載
実践unityゲーム開発

Recent News

Recent Tips

Tag Search