利用MeshFilter绘制网格,增加MeshCollider网格碰撞框
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class CreateMap : MonoBehaviour
{
public int w = 50;
public int h = 50;
VertexHelper vh;
// Start is called before the first frame update
void Start()
{
vh = new VertexHelper();
for (int x = 0; x < w; x++)
{
for (int z = 0; z < h; z++)
{
float y = Mathf.PerlinNoise(x * UserData.Ins.datas[UserData.In s.MapId].map_noise, z * UserData.Ins.datas[UserData.Ins.MapId].map_noise);
float uvx = x / (w - 1);
float uvy = z / (h - 1);
vh.AddVert(new Vector3(x, y * 2, z), Color.white, new Vector2 (uvx, uvy));
if (x < w - 1 && z < h - 1)
{
vh.AddTriangle(x * h + z, x * h + z + 1, (x + 1) * h + z + 1);
vh.AddTriangle(x * h + z, (x + 1) * h + z + 1, (x + 1) * h + z);
}
}
}
Mesh mesh = new Mesh();
vh.FillMesh(mesh);
GetComponent<MeshFilter>().mesh = mesh;
GetComponent<MeshCollider>().sharedMesh = mesh;
}
}
高度通过LinQ引入命名空间内的Mathf.PerlinNoise,柏林噪声来定义波浪起伏的高度,可以通过W和H 的值来更改地形的大小。其次是利用顶点绘制助手来进行的简易绘制,最后使其绘制的网格进行替换自身的网格信息,从而来达到利用Mesh网格来实现生成地形。