Photon(PUN 2)のインスタンス化を Resources から Prefab に変更する
目次
はじめに
こんにちは、のんびりエンジニアのたっつーです。
Twitter(@kingyo222)で Unity情報 を発信しているのでよければフォローしてください!
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リスト からインスタンス化してくれる実装に差し替えたいと思います。
ソースコード
以下のソースコードを追加します。
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 を指定します。
呼び出し側
呼び出し側は通常通りのインスタンス化の方法で使ってください。
// 文字列で指定
PhotonNetwork.Instantiate("BigAsteroid", Vector3.zero, Quaternion.identity, 0);
// Prefabの名前で指定
PhotonNetwork.Instantiate(prefab.name, Vector3.zero, Quaternion.identity, 0);
おすすめの記事
- Unity受賞一覧
- 人気のアセット一覧
- Unityでおすすめアセット集(2019/11更新)
- Unity:初心者におすすめの無料アセット12選
- Unityのおすすめアセット 5選(カメラ編)
- Unityのおすすめアセット 4選(アニメーション編)
- Unityのおすすめアセット 4選(データ編)
- Unityのおすすめアセット 4選(AI編)
- Unityのおすすめアセット 3選(ポストエフェクト編)
- Unityのおすすめアセット 7選(AR・VR・MR編)
- Unityのおすすめアセット 5選(ネットワーク編)
- Unityのおすすめアセット 5選(シェーダー編)
- Unityのおすすめアセット 6選(レンダリング編)
- Unityのおすすめアセット 7選(UI・GUI編)
- Unityのおすすめアセット 4選(スクリプティング)
- Unityのおすすめアセット 5選(モバイルネイティブ機能)
- Unityのおすすめアセット 7選(モデリング)
- Unityのおすすめアセット 50選 ゲームジャム(GameJam) ハッカソン(Hackathon)
- 人気のモデル(キャラクター)
よければ、SNSにシェアをお願いします!