public void Generate() { setSeed(seed); Debug.Log("We can generate " + int.MaxValue + " versions of this procedure"); Debug.Log("Generating version: " + seed); pt.Generate(); float[,] norm = pt.GetHeightsNormalized(); t.terrainData.SetHeights(0, 0, norm); Texture2D mask = new Texture2D(worldSize, worldSize); Color[] colors = new Color[worldSize * worldSize]; for (int x = 0; x < worldSize; x++) { for (int z = 0; z < worldSize; z++) { colors[x + (z * worldSize)] = new Color(norm[x, z], norm[x, z], norm[x, z]); } } mask.SetPixels(colors); mask.Apply(); //t.terrainData.terrainLayers[0].diffuseTexture = mask; }
public void TerrainGetCenter() { var n = 10; var height = 10; var terrain = ProceduralTerrain.Generate(n, height, 030195, 1.5f, 0.5f); var middleOfTerrain = terrain.GetComponent <Terrain>().GetCenter(); Assert.AreEqual( new Vector3((Mathf.Pow(2, n) + 1) / 2, height / 2, (Mathf.Pow(2, n) + 1) / 2), middleOfTerrain ); }
public void PositionAboveGround() { var height = 30; var terrain = ProceduralTerrain.Generate(10, height, 030195, 1000, 0.8f ); terrain.layer = LayerMask.NameToLayer("Ground"); var middleOfTerrain = terrain.GetComponent <Terrain>().GetCenter(); var nbObjects = 1000; var goScale = 2; var gos = new GameObject[nbObjects]; // Test that spawning above ground then correctly adjust slightly above foreach (var i in Enumerable.Range(0, nbObjects)) { var go = GameObject.CreatePrimitive(PrimitiveType.Cube); var randomPositionOnTerrain = Random.insideUnitCircle * Mathf.Pow(2, 9); go.transform.position = middleOfTerrain + new Vector3(randomPositionOnTerrain.x, 0, randomPositionOnTerrain.y) + Vector3.up * height; // TODO: see @Utils.Spatial.PositionAboveGround var aboveGround = go.transform.position.PositionAboveGround(prefabHeight: goScale); Physics.Raycast(aboveGround, Vector3.down, out var hit, Mathf.Infinity); Assert.NotNull(hit.transform, "didn't hit"); Assert.Equals(hit.transform.gameObject.layer, terrain.layer); Assert.Less(hit.transform.position.y as IComparable, aboveGround.y, "Ray-cast hit should be below object !"); gos[i] = go; } // Cleanup foreach (var go in gos) { Object.DestroyImmediate(go); } Object.DestroyImmediate(terrain); }