代码如下(把这个脚本挂载在空物体上就可以了)
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class MapTwo : MonoBehaviour
{
public Color water;
public Color ludi;
int x = 100, y = 100;
// Start is called before the first frame update
void Start()
{
HUA();
}
private void HUA()
{
MeshFilter mf = gameObject.AddComponent<MeshFilter>();
MeshRenderer mr = gameObject.AddComponent<MeshRenderer>();
MeshCollider mc = gameObject.AddComponent<MeshCollider>();
Mesh mesh = new Mesh();
VertexHelper vh = new VertexHelper();
Texture2D texture = new Texture2D(x, y);
for (int i = 0; i < x; i++)
{
for (int j = 0; j < y; j++)
{
float uvx = (float)i / (x - 1);
float uvy = (float)j / (y - 1);
float height = Mathf.PerlinNoise((uvx + 0.02f * i), (uvy + 0.02f * j));
Color col = GET(height);
texture.SetPixel(i, j, col);
vh.AddVert(new Vector3(i, height * 50, j), col, new Vector2(uvx, uvy));
if (i != x - 1 && j != y - 1)
{
vh.AddTriangle(i * y + j, i * y + j + 1, (i + 1) * y + j + 1);
vh.AddTriangle(i * y + j, (i + 1) * y + j + 1, (i + 1) * y + j);
}
}
}
texture.Apply();
vh.FillMesh(mesh);
mf.mesh = mesh;
mc.sharedMesh = mesh;
mr.material.mainTexture = texture;
}
private Color GET(float height)
{
if (height <= 0.4f)
{
return water;
}
else
{
return ludi;
}
}
}