/// <summary> /// 生成并展示地形 /// </summary> /// <param name="terrainData"></param> public void showTerrain(TerrainBean terrainData) { List <TerrainBlockBean> listTerrainBlockData = terrainData.listTerrainBlockData; for (int i = 0; i < listTerrainBlockData.Count; i++) { TerrainBlockBean itemData = listTerrainBlockData[i]; GameObject terrainBlock = InstantiateUtils.CreatePrefab(mTerrainBlockResPath, itemData.getTerrainBlockPosition(), new Quaternion()); terrainBlock.transform.localScale = new Vector3(1, itemData.terrainBlockHigh, 1); terrainBlock.transform.position = new Vector3(itemData.terrainBlockX, itemData.terrainBlockHigh / 2f, itemData.terrainBlockZ); terrainBlock.name = itemData.terrainBlockName; terrainBlock.transform.SetParent(transform); } }
/// <summary> /// 获取创建随机地形数据 /// </summary> /// <param name="terrainWide">地形宽</param> /// <param name="terrainLong">地形高</param> /// <param name="createPosition">地形创建起始位置</param> /// <returns></returns> public TerrainBean getCreateRandomTerrainData(int terrainWide, int terrainLong, Vector3 createPosition) { TerrainBean terrainData = new TerrainBean(); List <TerrainBlockBean> listTerrainBlockData = new List <TerrainBlockBean>(); float terrainHalfWide = terrainWide / 2f; float terrainHalfHigh = terrainLong / 2f; float halfUnitTerrain = mUnitTerrain / 2f; _seedX = Random.value * 100f; _seedZ = Random.value * 100f; for (int i = 0; i < terrainWide; i++) { for (int f = 0; f < terrainLong; f++) { TerrainBlockBean terrainBlockBean = new TerrainBlockBean(); float terrainBlockX = i - terrainHalfWide + createPosition.x + halfUnitTerrain; float terrainBlockZ = f - terrainHalfHigh + createPosition.z + halfUnitTerrain; float terrainBlockY = 0; float xSample = (terrainBlockX + _seedX) / 15; float zSample = (terrainBlockZ + _seedZ) / 15; float perlinNoise = Mathf.PerlinNoise(xSample, zSample); float terrainBlockHigh = perlinNoise * 10 + createPosition.y; string terrainBlockName = "X_" + terrainBlockX + " Y_" + terrainBlockY + " Z_" + terrainBlockZ; terrainBlockBean.terrainBlockName = terrainBlockName; terrainBlockBean.terrainBlockX = terrainBlockX; terrainBlockBean.terrainBlockY = terrainBlockY; terrainBlockBean.terrainBlockZ = terrainBlockZ; terrainBlockBean.terrainBlockHigh = terrainBlockHigh; listTerrainBlockData.Add(terrainBlockBean); } } ; terrainData.listTerrainBlockData = listTerrainBlockData; this.mTerrainBean = terrainData; return(terrainData); }