Updating multiplayer map on joining


Some friends and I are making our own multiplayer game in Unity using the Photon networking plugin.

We have a pre made map with objects in it we alter the state of the objects using RPCs.
Now, when a player joins the match i need to get the state of every object from the master client (any client can work), and i need to update the states of those objects on the joining client.

here’s the joining code(C#):

using UnityEngine;
using System.Collections;

public class NetworkHandler : Photon.MonoBehaviour
    public void Start() {
        PhotonNetwork.ConnectUsingSettings("alpha 1.0");

    public void OnGUI() {

    public void OnJoinedLobby() {

    // Update is called once per frame
    public void OnPhotonRandomJoinFailed() {

    public void OnJoinedRoom() {
        GameObject Player = PhotonNetwork.Instantiate("Player", Vector3.zero, Quaternion.identity, 0);
        Player.transform.position = new Vector3(3.278986f, 0, -2.779208f);

        // Enable all the scripts
        foreach (MonoBehaviour script in Player.GetComponents<MonoBehaviour>()) {
            script.enabled = true;

        Transform playerCam = Player.transform.Find("Main Camera");

And here is the code for the walls that use the RPCs(also C#):

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Wall : Photon.MonoBehaviour
    public enum Type {
        Default = 0,
        Unbreakable = 1,
        Ghost = 2

    public Type type;
    private List<Material> materials = new List<Material>();

    private PhotonView myphoton;

    // Use this for initialization
    public void Start() {
        materials.Insert((int)Type.Default, Resources.Load("Materials/Wall_Default") as Material);
        materials.Insert((int)Type.Unbreakable, Resources.Load("Materials/Wall_Solid") as Material);
        materials.Insert((int)Type.Ghost, Resources.Load("Materials/Wall_Default_Ghost") as Material);
        myphoton = GetComponent<PhotonView>();

        //if (Random.Range(0, 2) > 0) {
        //    myphoton.RPC("Deactivate", PhotonTargets.All);

     * Wall (de)activators
    public void Activate() {
            gameObject.collider.isTrigger = false;
            // renderer.material = material;
            renderer.material = materials[(int)Type.Default];
            type = Type.Default;
            gameObject.layer = 0;
    public void Deactivate() {
            gameObject.collider.isTrigger = true;
            renderer.material = materials[(int)Type.Ghost];
            type = Type.Ghost;
            gameObject.layer = 8;

     * Called when the object is being clicked on by the player
    public void Click(/*Player.Mode mode*/) {
        switch (type) {
            case Type.Default:
                myphoton.RPC("Deactivate", PhotonTargets.All);

            case Type.Ghost:
                myphoton.RPC("Activate", PhotonTargets.All);

            case Type.Unbreakable:
                // Nothing to do here

So, each wall has an Active and Deactive state basically and i need to sychronize those states for the newly joining players.

Thanks a tonne,


I would look into the PhotonTarget.AllBuffered. Basically all new joining players will have the rpc sent to them when they join your game.