LoginSignup
6
6

More than 3 years have passed since last update.

Photon(PUN 2)のインスタンス化を Resources から Prefab に変更する

Posted at

はじめに

こんにちは、のんびりエンジニアのたっつーです。
ブログを運営しています、今回はこの記事の転載になります。

Unityのネットワークライブラリの Photon を使う場合に、Photonのインスタンス化を Resources から 自分で指定したプレファブリストに変更する方法をご紹介したいと思います。

Photon とは?

PUN 2 – FREE (無料版)
Photon PUN 2+ (有料版)

Photon とはマルチプレイヤーゲームを作る場合にネットワーク部分を担当してくれるネットワークライブラリになります。

例えば、モンストなどのゲームを作る場合には同時プレイしている4人の画面の情報を同期しないといけないですよね?そんな時に Photon を使うとネットワーク部分のめんどくさい部分を一括して担当してくれます。

使い方

Photon の使い方

Photon の使い方は今回のテーマではないので他の記事に譲ります。

今回は、Photon を使う時に困る事の1つとしてインスタンス化する際に Resources に Prefab を格納しないといけないのですが、これを自分で定義したリストから生成するように変更します。

Resources から Prefab への変更方法

通常 Photon では、文字列の名前から Resources を検索してヒットしたオブジェクトをインスタンス化の対象とします。

上記のソースコードは Photon内で、「DefaultPool」で定義されているソースコードになります、中身簡単に読んでみると Resources で定義された Prefab をキャッシュしなから要求があれば、インスタンス化してくれる実装になっています。

今回はこの実装を、自分で作った Prefabリスト からインスタンス化してくれる実装に差し替えたいと思います。

ソースコード

以下のソースコードを追加します。

MyPhotonPool.cs
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;

public class MyPhotonPool : MonoBehaviourPunCallbacks, IPunPrefabPool
{
    public List<GameObject> PrefabList;

    public void Start()
    {
        // Poolの生成イベントを書き換える
        PhotonNetwork.PrefabPool = this;
    }

    public GameObject Instantiate(string prefabId, Vector3 position, Quaternion rotation)
    {
        foreach (var s in PrefabList)
        {
            if (s.name == prefabId)
            {
                var go = Instantiate(s, position, rotation);
                go.SetActive(false);
                return go;
            }
        }

        return null;
    }

    public void Destroy(GameObject go)
    {
        GameObject.Destroy(go);
    }
}

使い方

プールの定義

MyPhotonPoolスクリプトを適当なオブジェクトに追加して、PrefabList に Photon の生成対象となる Prefab を指定します。

image-2.png

呼び出し側

呼び出し側は通常通りのインスタンス化の方法で使ってください。

// 文字列で指定
PhotonNetwork.Instantiate("BigAsteroid", Vector3.zero, Quaternion.identity, 0);

// Prefabの名前で指定
PhotonNetwork.Instantiate(prefab.name, Vector3.zero, Quaternion.identity, 0);

終わりに

よければ ブログ「Unity+AssetStoreおすすめ情報」の方にも色々記載しているのでぜひご参照いただければと思います。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6