网格地图

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// 网格地图
/// </summary>
[RequireComponent(typeof(MeshFilter),typeof(MeshRenderer),typeof(MeshCollider))]//不存在组件就添加组件
public class Maps : MonoBehaviour
{
    public Texture2D text;//纹理
    int w = 128;
    int h = 128;
    public Color tu = Color.yellow;
    public Color cao = Color.green;
    public float max = 5;
    VertexHelper vh;
    public GameObject im;

    // Start is called before the first frame update
    void Start()
    {
        text = new Texture2D(w, h);
        vh = new VertexHelper();
        for (int i = 0; i < w; i++)
        {
            for (int j = 0; j < h; j++)
            {
                float y = Mathf.PerlinNoise(i * 0.1f, j * 0.1f);//柏林噪声从随机数到自然数
                float ux = (float)i / (w - 1);
                float uy = (float)j / (h - 1);
                Color c = Color.Lerp(tu, cao, y);//生成像素颜色
                text.SetPixel(i, j, c);//设置像素颜色
                vh.AddVert(new Vector3(i - w / 2, max * y, j - h / 2), Color.white, new Vector4(ux, uy));
                if (i != w - 1 && j != h - 1)
                {
                    vh.AddTriangle(i * h + j, i * h + j + 1, (i + 1) * h + j + 1);
                    vh.AddTriangle(i * h + j, (i + 1) * h + j + 1, (i + 1) * h + j);
                }
            }
        }
        text.Apply();
        Mesh m = new Mesh();
        vh.FillMesh(m);
        GetComponent<MeshFilter>().mesh = m;
        GetComponent<MeshCollider>().sharedMesh = m;
        Material ma = new Material(Shader.Find("UI/Default"));
        ma.mainTexture = text;
        GetComponent<MeshRenderer>().material = ma;
    }
}

 

posted @ 2023-04-11 13:43  温暖的海  阅读(62)  评论(0)    收藏  举报