- Home /
Updating multiplayer map on joining
Hello,
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() {
GUILayout.Label(PhotonNetwork.connectionStateDetailed.ToString());
}
public void OnJoinedLobby() {
PhotonNetwork.JoinRandomRoom();
}
// Update is called once per frame
public void OnPhotonRandomJoinFailed() {
PhotonNetwork.CreateRoom(null);
}//
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");
playerCam.gameObject.SetActive(true);
}
}
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
*/
[RPC]
public void Activate() {
gameObject.collider.isTrigger = false;
// renderer.material = material;
renderer.material = materials[(int)Type.Default];
type = Type.Default;
gameObject.layer = 0;
}
[RPC]
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);
break;
case Type.Ghost:
myphoton.RPC("Activate", PhotonTargets.All);
break;
case Type.Unbreakable:
// Nothing to do here
break;
}
}
}
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,
Yannick
Answer by MileSplit · May 08, 2014 at 03:28 PM
I would look into the PhotonTarget.AllBuffered. Basically all new joining players will have the rpc sent to them when they join your game.
Your answer
![](https://koobas.hobune.stream/wayback/20220613144535im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Unity3D Photon movement synchronization 0 Answers
Photon timer issue 2 Answers
Unity networking tutorial? 6 Answers
Photon Cloud, Multiplayer Damage script 0 Answers