private void SpawnObjects(float[,] noiseMap, int treeAmount) { DestroyAllChildren(); bool doOnce = true; bool[,] occupiedMap = new bool[_chunkSize, _chunkSize]; for (int i = 0; i < treeAmount; i++) { int ocX = Random.Range(0, _chunkSize); int ocY = Random.Range(0, _chunkSize); if (occupiedMap[ocX, ocY]) { i--; continue; } occupiedMap[ocX, ocY] = true; int rndX = ocX; int rndZ = ocY; Vector3 pos = MeshGenerator.ChunkToWorldPos(rndX, rndZ, _chunkSize, noiseMap, _meshHeightMultiplier, _meshHeightCurve); int rndVeg = Random.Range(0, _vegetaion.Length); //Spawn Player if (doOnce && pos.y > 6.5f && pos.y < 10) { Instantiate(_player, Vector3.Scale(pos, transform.lossyScale), Quaternion.Euler(0, Random.Range(0, 360), 0), transform); doOnce = false; } if (pos.y > _vegetaion[rndVeg].MinHeight && pos.y < _vegetaion[rndVeg].MaxHeight) { Quaternion rndRot = Quaternion.Euler(0, Random.Range(0, 360), 0); GameObject obj = Instantiate(_vegetaion[rndVeg].Prefab, Vector3.Scale(pos, transform.lossyScale), rndRot, transform); obj.transform.localScale = new Vector3(1 / transform.lossyScale.x * Random.Range(_vegetaion[rndVeg].MinScale, _vegetaion[rndVeg].MaxScale), 1 / transform.lossyScale.y * Random.Range(_vegetaion[rndVeg].MinScale, _vegetaion[rndVeg].MaxScale), 1 / transform.lossyScale.z * Random.Range(_vegetaion[rndVeg].MinScale, _vegetaion[rndVeg].MaxScale)); } } }