public void UpdateTerrainBlock() { if (bUpdate == false) { return; } if (m_layerData == null) { return; } int index = m_x + m_z * (int)m_layerData.BlockNumX; float offsetx = GetOffsetX(m_x); float offsetz = -GetOffsetX(m_z); int nStartX = 0; int nEndX = 0; int nStartZ = 0; int nEndZ = 0; GetNodeBound(m_layerData, m_x, m_z, ref nStartX, ref nEndX, ref nStartZ, ref nEndZ); Clear(); Begin(); // Debug.Log("UpdateBlock set flag x" + m_x + " z" + m_z); List <Vector3> vertices = new List <Vector3>(); List <Vector2> uv = new List <Vector2>(); List <int> triangles = new List <int>(); int verCount = 0; int triCount = 0; int uvCount = 0; float m_uGridLenX = TerrainBlock.GRID_LEN; float m_uGridLenZ = TerrainBlock.GRID_LEN; for (int z = nStartZ; z < nEndZ; z++) { for (int x = nStartX; x < nEndX; x++) { GridInfo grid = m_layerData.GetGrid(x, z); if (grid.IsMask == false) { continue; } float fHeight1 = m_layerData.GetHeight(x, z); float fHeight2 = m_layerData.GetHeight(x, z + 1); float fHeight3 = m_layerData.GetHeight(x + 1, z + 1); float fHeight4 = m_layerData.GetHeight(x + 1, z); // 上面去一点地形不容易搓出来 fHeight1 += m_TerrainBlockHeight; fHeight2 += m_TerrainBlockHeight; fHeight3 += m_TerrainBlockHeight; fHeight4 += m_TerrainBlockHeight; /* * 0------1 | | | | | 3------2 */ // 一象限变四象限 Vector3 pos1 = new Vector3(x * m_uGridLenX - offsetx, fHeight1, (-z) * m_uGridLenZ - offsetz); Vector3 pos2 = new Vector3((x + 1) * m_uGridLenX - offsetx, fHeight4, (-z) * m_uGridLenZ - offsetz); Vector3 pos3 = new Vector3((x + 1) * m_uGridLenX - offsetx, fHeight3, -(z + 1) * m_uGridLenZ - offsetz); Vector3 pos4 = new Vector3(x * m_uGridLenX - offsetx, fHeight2, -(z + 1) * m_uGridLenZ - offsetz); vertices.Add(pos1); vertices.Add(pos2); vertices.Add(pos3); vertices.Add(pos4); Vector2 uv1 = new Vector2(0, 0); Vector2 uv2 = new Vector2(0, 1 / GridDef.GridSize); Vector2 uv3 = new Vector2(1 / GridDef.GridSize, 1 / GridDef.GridSize); Vector2 uv4 = new Vector2(1 / GridDef.GridSize, 0); uv.Add(uv1); uv.Add(uv2); uv.Add(uv3); uv.Add(uv4); // 一象限变四象限 triangles.Add(verCount + 2); triangles.Add(verCount); triangles.Add(verCount + 1); triangles.Add(verCount + 3); triangles.Add(verCount); triangles.Add(verCount + 2); verCount += 4; uvCount += 4; triCount += 6; } } Color color = Color.white; if (m_layerData.layerType == BaseLayer.LayerType.eLayerBlock) { color = Color.red; } else if (m_layerData.layerType == BaseLayer.LayerType.eLayerPK) { color = Color.blue; } else if (m_layerData.layerType == BaseLayer.LayerType.eLayerBoss) { color = Color.yellow; } else if (m_layerData.layerType == BaseLayer.LayerType.eLayerSafe) { color = Color.green; } else if (m_layerData.layerType == BaseLayer.LayerType.eLayerBattle) { color = Color.cyan; } else if (m_layerData.layerType == BaseLayer.LayerType.eLayer9Grid) { if (m_x % 2 == 0) { if (m_z % 2 == 0) { color = Color.green; } else { color = Color.red; } } else { if (m_z % 2 == 0) { color = Color.red; } else { color = Color.green; } } } color.a = 0.5f; SetColor(color); Position(ref vertices); Triangles(ref triangles); End(); bUpdate = false; }