C# UV贴图墙的正确方法是什么?

C# UV贴图墙的正确方法是什么?,c#,unity3d,mesh,uv-mapping,C#,Unity3d,Mesh,Uv Mapping,我目前正在使用一个映射工具,它将为我的游戏生成一个自定义的映射。我的网格生成工作得很好,但我不知道如何正确地对我的脸进行UV贴图以获得一致的纹理。通过使用相应的坐标对,我已经在地板上完美地绘制了UV贴图,但是墙壁的效果似乎不一样 有人知道将UV贴图映射到垂直墙的正确方法吗? 以下是我目前的一些墙壁示例: 我目前正在使用它来绘制墙的UV贴图 currentMesh.uvs.Add(new Vector2(0, 0)); currentMesh.uvs.Add(ne

我目前正在使用一个映射工具,它将为我的游戏生成一个自定义的映射。我的网格生成工作得很好,但我不知道如何正确地对我的脸进行UV贴图以获得一致的纹理。通过使用相应的坐标对,我已经在地板上完美地绘制了UV贴图,但是墙壁的效果似乎不一样

有人知道将UV贴图映射到垂直墙的正确方法吗?

以下是我目前的一些墙壁示例:

我目前正在使用它来绘制墙的UV贴图

        currentMesh.uvs.Add(new Vector2(0, 0));
        currentMesh.uvs.Add(new Vector2(1, 0));
        currentMesh.uvs.Add(new Vector2(0, 1));
        currentMesh.uvs.Add(new Vector2(1, 1));

对于这种情况,我执行以下步骤:
1.使纹理为正方形(用于减少下面代码中的计算)。此外,要使其无缝并以包裹模式重复。
2.像这样找出矩形的长度和宽度:

Length = (float)Vector3.Distance(mesh.vertices [0],mesh.vertices [1])
Width = (float)Vector3.Distance(mesh.vertices [0],mesh.vertices [3])
3.然后我使用以下代码创建UV贴图:

    Vector2[] uv = new Vector2[mesh.vertices.Length];
    float min = Length>Width?Length:Width;
    for (int i = 0, y = 0; i < uv.Length; i++){
        uv [i] = new Vector2 ((float)mesh.vertices [i].z / min, (float)mesh.vertices [i].y / min);    
    }
Vector2[]uv=newvector2[mesh.vertices.Length];
浮动最小值=长度>宽度?长度:宽度;
对于(int i=0,y=0;i
这里,我取了.z.y,因为我的平面在yz平面上。这段代码的作用是找到矩形的小臂,并根据它拟合纹理。
以下是结果的屏幕截图:

以下是我使用的纹理:

我从这里学到了这一点:

我已经设法弄明白了。我最后做的是取顶点的XZ,并根据墙的方向取两者的权重,最后得到我想要的结果

        Vector3 heading = new Vector3(floor2.x - floor1.x, 0, floor2.z - floor1.z);
        Vector3 direction = heading / heading.magnitude;

        currentMesh.uvs.Add(new Vector2(((floor1.x * direction.x) + (floor1.z * direction.z)) / scale, floor1.y / scale));
        currentMesh.uvs.Add(new Vector2(((floor2.x * direction.x) + (floor2.z * direction.z)) / scale, floor2.y / scale));
        currentMesh.uvs.Add(new Vector2(((ceil1.x * direction.x) + (ceil1.z * direction.z)) / scale, ceil1.y / scale));
        currentMesh.uvs.Add(new Vector2(((ceil2.x * direction.x) + (ceil2.z * direction.z)) / scale, ceil2.y / scale));