- Home /
Question by
danny_appel · May 07 at 01:41 PM ·
photon
PhotonNetwork.Instantiate creates multiple instead of one.
Hi all,
I'm trying to spawn a certain gameobject only once, but if I try to play with 2 or 3 players, it will either spawn twice in all clients, or it will spawn only in 1 client and the other 2 doesnt have anything in it. What am I doing wrong?
And the gameobject that I mean is at the bottom, the "SpecialSceneClone".
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Homebase_MapGenerator : Photon.MonoBehaviour
{
private GameStatus gameStatus;
private GameSettings gameSettings;
public PhotonView photonView;
public int currentSeed;
public Transform[] allTerreinSpawnPoints;
public Transform[] allLootableSpawnPoints;
[SerializeField] private List<Transform> lootSpawnPoints = new List<Transform>();
[SerializeField] private List<Transform> terreinSpawnPoints = new List<Transform>();
[Header("All Spawnable Objects.")]
public GameObject[] spawnableLootObjects;
public GameObject[] spawnableGrass;
public GameObject[] spawnableTrees;
public GameObject[] spawnableRocks;
public GameObject[] spawnableJunk;
public GameObject[] spawnableSpecialScenes; // These will be handmade, with a certain collider around them so they can 'destroy' other spawnable objects in his vicinity. They are tagged with "SpawnableObject".
[Header("All counts of spawnable objects, depending on terrein.")]
public int lootObjectSpawnCount = 3;
public int grassSpawnCount = 30;
public int treesSpawnCount = 10;
public int rocksSpawnCount = 10;
public int junkSpawnCount = 15;
public int specialSceneSpawnCount = 1;
private void Awake()
{
gameStatus = FindObjectOfType<GameStatus>();
gameSettings = FindObjectOfType<GameSettings>();
photonView = GetComponent<PhotonView>();
currentSeed = gameSettings.currentHomeBaseSeed;
Random.InitState(currentSeed);
Debug.Log("Current seed is: " + currentSeed + " / " + gameSettings.currentHomeBaseSeed);
foreach (var item in allLootableSpawnPoints)
{
lootSpawnPoints.Add(item);
}
foreach (var item in allTerreinSpawnPoints)
{
terreinSpawnPoints.Add(item);
}
GeneratingMap();
}
private void GeneratingMap()
{
while(lootObjectSpawnCount >= 1)
{
var randomObject = Random.Range(1, spawnableLootObjects.Length);
var randomSpot = Random.Range(1, lootSpawnPoints.Count);
GameObject lootSpawnClone = Instantiate(spawnableLootObjects[randomObject], lootSpawnPoints[randomSpot]);
lootSpawnClone.transform.localRotation = Quaternion.Euler(new Vector3(0, Random.Range(0f, 360f), 0));
lootSpawnPoints.RemoveAt(randomSpot);
lootObjectSpawnCount -= 1;
}
while (grassSpawnCount >= 1)
{
var randomObject = Random.Range(1, spawnableGrass.Length);
var randomSpot = Random.Range(1, terreinSpawnPoints.Count);
GameObject grassSpawnClone = Instantiate(spawnableGrass[randomObject], terreinSpawnPoints[randomSpot]);
grassSpawnClone.transform.localRotation = Quaternion.Euler(new Vector3(0, Random.Range(0f, 360f), 0));
terreinSpawnPoints.RemoveAt(randomSpot);
grassSpawnCount -= 1;
}
while (treesSpawnCount >= 1)
{
var randomObject = Random.Range(1, spawnableTrees.Length);
var randomSpot = Random.Range(1, terreinSpawnPoints.Count);
GameObject treeSpawnClone = Instantiate(spawnableTrees[randomObject], terreinSpawnPoints[randomSpot]);
treeSpawnClone.transform.localRotation = Quaternion.Euler(new Vector3(0, Random.Range(0f, 360f), 0));
terreinSpawnPoints.RemoveAt(randomSpot);
treesSpawnCount -= 1;
}
while (rocksSpawnCount >= 1)
{
var randomObject = Random.Range(1, spawnableRocks.Length);
var randomSpot = Random.Range(1, terreinSpawnPoints.Count);
GameObject rockSpawnClone = Instantiate(spawnableRocks[randomObject], terreinSpawnPoints[randomSpot]);
rockSpawnClone.transform.localRotation = Quaternion.Euler(new Vector3(0, Random.Range(0f, 360f), 0));
terreinSpawnPoints.RemoveAt(randomSpot);
rocksSpawnCount -= 1;
}
while (junkSpawnCount >= 1)
{
var randomObject = Random.Range(1, spawnableJunk.Length);
var randomSpot = Random.Range(1, terreinSpawnPoints.Count);
GameObject junkSpawnClone = Instantiate(spawnableJunk[randomObject], terreinSpawnPoints[randomSpot]);
junkSpawnClone.transform.localRotation = Quaternion.Euler(new Vector3(0, Random.Range(0f, 360f), 0));
terreinSpawnPoints.RemoveAt(randomSpot);
junkSpawnCount -= 1;
}
while (specialSceneSpawnCount >= 1 && photonView.isMine)
{
var randomObject = Random.Range(0, spawnableSpecialScenes.Length);
var randomSpot = Random.Range(1, terreinSpawnPoints.Count);
GameObject specialSceneClone = PhotonNetwork.Instantiate(spawnableSpecialScenes[randomObject].name, terreinSpawnPoints[randomSpot].transform.position, Quaternion.identity, 0);
specialSceneClone.transform.localRotation = Quaternion.Euler(new Vector3(0, Random.Range(0f, 360f), 0));
terreinSpawnPoints.RemoveAt(randomSpot);
specialSceneSpawnCount -= 1;
photonView.RPC("SendingSpecialSceneCount", PhotonTargets.AllBuffered, specialSceneSpawnCount);
}
}
[PunRPC]
public void SendingSpecialSceneCount(int specialscenecount)
{
specialSceneSpawnCount = specialscenecount;
}
}
Comment
Your answer

Follow this Question
Related Questions
communication ovedr http 0 Answers
photon marco polo tutorial issue with "peercreated" 1 Answer
Photon username script 0 Answers
Rigidbody lag in Photon Cloud Networking. 1 Answer
How to create multyplayer npc? Tips? 0 Answers