protected override void OnUpdate(EntityCommandBuffer.Concurrent ecb) { lastSpawnTime -= Time.DeltaTime; if (lastSpawnTime <= 0) { lastSpawnTime = setup.spawnInterval; lastSpawnTime = float.MaxValue; var spawnCount = setup.spawnCount; var spawnRadius = setup.spawnRadius; var playerPos = (float3)GameManager.GetPlayerPosition(); var random = new Random(mainRandom.NextUInt(uint.MinValue, uint.MaxValue)); var enemyArchetype = enemyPrefab; float3 RandomPointOnCircle(float spawnRaduis) { var pos = random.NextFloat2Direction() * spawnRaduis; return(new float3(pos.x, 0, pos.y) + playerPos); } Job .WithCode(() => { var jobIndex = 0; for (int i = 0; i < spawnCount; i++) { var enemy = ecb.CreateEntity(jobIndex, enemyArchetype); ecb.AddComponent(jobIndex, enemy, new Translation { Value = RandomPointOnCircle(spawnRadius) }); ecb.AddComponent(jobIndex, enemy, new Rotation { Value = quaternion.Euler(0, random.NextFloat(-math.PI, math.PI), 0) }); } }) .Schedule(); } }