Ejemplo n.º 1
0
    /// <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);
        }
    }
Ejemplo n.º 2
0
    /// <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);
    }
Ejemplo n.º 3
0
    /// <summary>
    /// 创建地形方块(基础)
    /// </summary>
    public void createTerrainBlock()
    {
        TerrainBean terrainData = mBaseModel.getCreateRandomTerrainData(50, 50, new Vector3(0, 0, 0));

        mBaseView.showTerrain(terrainData);
    }