52 lines
1.6 KiB
C#
52 lines
1.6 KiB
C#
|
using UnityEngine;
|
|||
|
|
|||
|
namespace Mirror.Examples.Benchmark
|
|||
|
{
|
|||
|
public class BenchmarkNetworkManager : NetworkManager
|
|||
|
{
|
|||
|
[Header("Spawns")]
|
|||
|
public GameObject spawnPrefab;
|
|||
|
public int spawnAmount = 5000;
|
|||
|
public float interleave = 1;
|
|||
|
|
|||
|
void SpawnAll()
|
|||
|
{
|
|||
|
// calculate sqrt so we can spawn N * N = Amount
|
|||
|
float sqrt = Mathf.Sqrt(spawnAmount);
|
|||
|
|
|||
|
// calculate spawn xz start positions
|
|||
|
// based on spawnAmount * distance
|
|||
|
float offset = -sqrt / 2 * interleave;
|
|||
|
|
|||
|
// spawn exactly the amount, not one more.
|
|||
|
int spawned = 0;
|
|||
|
for (int spawnX = 0; spawnX < sqrt; ++spawnX)
|
|||
|
{
|
|||
|
for (int spawnZ = 0; spawnZ < sqrt; ++spawnZ)
|
|||
|
{
|
|||
|
// spawn exactly the amount, not any more
|
|||
|
// (our sqrt method isn't 100% precise)
|
|||
|
if (spawned < spawnAmount)
|
|||
|
{
|
|||
|
// instantiate & position
|
|||
|
GameObject go = Instantiate(spawnPrefab);
|
|||
|
float x = offset + spawnX * interleave;
|
|||
|
float z = offset + spawnZ * interleave;
|
|||
|
go.transform.position = new Vector3(x, 0, z);
|
|||
|
|
|||
|
// spawn
|
|||
|
NetworkServer.Spawn(go);
|
|||
|
++spawned;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void OnStartServer()
|
|||
|
{
|
|||
|
base.OnStartServer();
|
|||
|
SpawnAll();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|