I use the following code to spawn Players.
But when its called both master and client prefabs getting are spawned out of place.
Can someone help me?
[PunRPC]
public void RPC_SpawnTargets()
{
int i = 1;
TargetFormation=GameObject.Find("Target Formation").GetComponent<Transform>();
foreach (Transform child in TargetFormation )
{
GameObject target = PhotonNetwork.Instantiate(Path.Combine("Prefabs","Target"),child.transform.position,Quaternion.identity,0) as GameObject;
target.name = "Target ("+i+")";
target.transform.parent = child;
print("Target Function called "+i+" times");
i++;
}
i = 0;
}
[PunRPC]
public void RPC_SpawnPlayers()
{
int i = 1;
PlayerFormation=GameObject.Find("Player Formation").GetComponent<Transform>();
foreach (Transform child in PlayerFormation )
{
GameObject player =PhotonNetwork.Instantiate(Path.Combine("Prefabs","Player"),child.transform.position,Quaternion.identity,0) as GameObject;
player.name = "Player ("+i+")";
player.transform.parent = child;
i++;
}
i=0;
}
These functions are called like this:
if (PlayersInGame==PhotonNetwork.playerList.Length)
{
PhotonView.RPC("RPC_SpawnPlayerCamera",PhotonTargets.MasterClient);
PhotonView.RPC("RPC_SpawnPlayers",PhotonTargets.MasterClient);
PhotonView.RPC("RPC_AssignPlayerButtons",PhotonTargets.MasterClient);
PhotonView.RPC("RPC_SpawnTargetCamera",PhotonTargets.Others);
PhotonView.RPC("RPC_SpawnTargets",PhotonTargets.Others);
PhotonView.RPC("RPC_AssignTargetButtons",PhotonTargets.Others);
}
This is the complete script.
public class PlayerNetwork : Photon.MonoBehaviour {
public static PlayerNetwork instance;
public string PlayerName {get;private set ;}
private PhotonView PhotonView;
private int PlayersInGame=0;
public GameObject Player,Target;
private Transform PlayerFormation,TargetFormation;
private PlayerController a, b, c;
private TargetController x,y,z;
private Button a1,b1,c1,x2,y2,z2;
void Awake ()
{
instance=this;
PlayerName="Gamer#"+Random.Range(1000,9999);
PhotonView=GetComponent<PhotonView>();
SceneManager.sceneLoaded+=OnSceneFinishedLoading;
}
private void OnSceneFinishedLoading(Scene scene, LoadSceneMode mode)
{
if (scene.name=="test")
{
if (PhotonNetwork.isMasterClient)
MasterLoadedGame();
else
NonMasterLoadedGame();
}
}
private void MasterLoadedGame()
{
PhotonView.RPC("RPC_LoadedGameScene",PhotonTargets.MasterClient);
PhotonView.RPC("RPC_LoadGameOthers",PhotonTargets.Others);
}
private void NonMasterLoadedGame()
{
PhotonView.RPC("RPC_LoadedGameScene",PhotonTargets.MasterClient);
}
[PunRPC]
private void RPC_LoadGameOthers()
{
PhotonNetwork.LoadLevel(1);
}
[PunRPC]
private void RPC_LoadedGameScene()
{
PlayersInGame++;
if (PlayersInGame==PhotonNetwork.playerList.Length)
{
PhotonView.RPC("RPC_SpawnPlayerCamera",PhotonTargets.MasterClient);
PhotonView.RPC("RPC_SpawnPlayers",PhotonTargets.MasterClient);
PhotonView.RPC("RPC_AssignPlayerButtons",PhotonTargets.MasterClient);
PhotonView.RPC("RPC_SpawnTargetCamera",PhotonTargets.Others);
PhotonView.RPC("RPC_SpawnTargets",PhotonTargets.Others);
PhotonView.RPC("RPC_AssignTargetButtons",PhotonTargets.Others);
}
}
[PunRPC]
private void RPC_SpawnPlayerCamera()
{
Camera.main.transform.position=new Vector3(0f,2f,-7f);
Camera.main.transform.rotation=Quaternion.Euler(15f,0f,0f);
}
[PunRPC]
private void RPC_SpawnTargetCamera()
{
Camera.main.transform.position=new Vector3(0f,2f,7f);
Camera.main.transform.rotation=Quaternion.Euler(15f,180f,0f);
}
[PunRPC]
public void RPC_SpawnTargets()
{
int i = 1;
TargetFormation=GameObject.Find("Target Formation").GetComponent<Transform>();
foreach (Transform child in TargetFormation )
{
GameObject target = PhotonNetwork.Instantiate(Path.Combine("Prefabs","Target"),child.transform.position,Quaternion.identity,0) as GameObject;
target.name = "Target ("+i+")";
target.transform.parent = child;
i++;
}
i = 0;
}
[PunRPC]
public void RPC_SpawnPlayers()
{
int i = 1;
PlayerFormation=GameObject.Find("Player Formation").GetComponent<Transform>();
foreach (Transform child in PlayerFormation )
{
GameObject player =PhotonNetwork.Instantiate(Path.Combine("Prefabs","Player"),child.transform.position,Quaternion.identity,0) as GameObject;
player.name = "Player ("+i+")";
player.transform.parent = child;
i++;
}
i=0;
}
[PunRPC]
private void RPC_AssignPlayerButtons()
{
a = GameObject.Find("Player (1)").GetComponent<PlayerController>();
b = GameObject.Find("Player (2)").GetComponent<PlayerController>();
c = GameObject.Find("Player (3)").GetComponent<PlayerController>();
a1=GameObject.Find("P1 Jump").GetComponent<Button>();
a1.onClick.AddListener(a.Jump);
b1=GameObject.Find("P2 Jump").GetComponent<Button>();
b1.onClick.AddListener(b.Jump);
c1=GameObject.Find("P3 Jump").GetComponent<Button>();
c1.onClick.AddListener(c.Jump);
}
[PunRPC]
private void RPC_AssignTargetButtons()
{
x = GameObject.Find("Target (3)").GetComponent<TargetController>();
y = GameObject.Find("Target (2)").GetComponent<TargetController>();
z = GameObject.Find("Target (1)").GetComponent<TargetController>();
x2=GameObject.Find("P1 Jump").GetComponent<Button>();
x2.onClick.AddListener(x.Jump);
y2=GameObject.Find("P2 Jump").GetComponent<Button>();
y2.onClick.AddListener(y.Jump);
z2=GameObject.Find("P3 Jump").GetComponent<Button>();
z2.onClick.AddListener(z.Jump);
}
}