统一中,我试图弄清楚如何生成具有八度音程的网格。我该怎么办?

问题描述 投票:0回答:1

我按照 brackeys 教程系列在 Unity 中制作了一个小型网格生成器,但我认为其中一个已被删除或删除,因为缺少一些片段。我正在尝试学习如何使用八度音阶和柏林噪声来创建更有趣的地形,但我无法弄清楚。如果你能帮助我,这是我的代码:

[RequireComponent(typeof(MeshFilter))]
public class MeshGenerator : MonoBehaviour
{
    Mesh mesh;

    Vector3[] vertices;
    int[] triangles;
    Color[] colors;
    public Gradient gradient;

    float minTerrainHeight;
    float maxTerrainHeight;

    public int xSize = 20;
    public int zSize = 20;
    
   
    void Start()
    {
        


        mesh = new Mesh();
        GetComponent<MeshFilter>().mesh = mesh;

        CreateShape();
        UpdateMesh();
    }

    void CreateShape()
    {
        vertices = new Vector3[(xSize + 1) * (zSize + 1)];

        colors = new Color[vertices.Length];
        for (int i = 0, z = 0; z <= zSize; z++)
        {
            for (int x = 0; x <= xSize; x++)
            {

                float y = Mathf.PerlinNoise(x * 0.3f, z * 0.3f) * 3f;

                if (y > maxTerrainHeight)
                {
                    maxTerrainHeight = y;
                }
                if (y < minTerrainHeight)
                {
                    minTerrainHeight = y;
                }

                float height = Mathf.InverseLerp(minTerrainHeight, maxTerrainHeight, vertices[i].y);

                colors[i] = gradient.Evaluate(height);

                


                vertices[i] = new Vector3(x, y, z);
                i++;
            }
        }

        triangles = new int[xSize * zSize * 6];
        int vert = 0;
        int tris = 0;
        
        for (int z = 0; z < zSize; z++)
        {
            for (int x = 0; x < xSize; x++)
            {
                triangles[tris + 0] = vert + 0;
                triangles[tris + 1] = vert + xSize + 1;
                triangles[tris + 2] = vert + 1;
                triangles[tris + 3] = vert + 1;
                triangles[tris + 4] = vert + xSize + 1;
                triangles[tris + 5] = vert + xSize + 2;

               

                vert++;
                tris += 6;

                
            }
            vert++;
        }
        
        
    }        
    void UpdateMesh()
    {
        mesh.Clear();

        mesh.vertices = vertices;
        mesh.triangles = triangles;

        mesh.colors = colors;
        mesh.RecalculateNormals();

    }
    
}
c# unity-game-engine perlin-noise
1个回答
-1
投票

我相信这可能有用: https://youtu.be/MRNFcywkUSA?t=390

此外,这很好地解释了八度: https://youtu.be/ob3VwY4JyzE?t=982

© www.soinside.com 2019 - 2024. All rights reserved.