我目前正在使用一种映射工具,它将为我的游戏生成自定义地图。我已经使网格生成工作正常,但是我看不出如何正确地对我的脸进行UV贴图以使纹理一致。仅使用相应的坐标对,UV贴图就可以完美地在地板上工作,但是墙壁似乎无法正常工作。

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

这是我当前的墙壁的一些例子:
c# - UV贴墙的正确方法是什么?-LMLPHP
c# - UV贴墙的正确方法是什么?-LMLPHP

我目前正在将此用于墙壁的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);
    }


在这里,由于飞机处于yz平面,所以我选择了.z和.y。该代码的作用是,找到矩形的较小臂并根据该矩形拟合纹理。
这是结果的屏幕截图:
c# - UV贴墙的正确方法是什么?-LMLPHP

这是我使用的纹理:
c# - UV贴墙的正确方法是什么?-LMLPHP

我从这里学到了这一点:
http://catlikecoding.com/unity/tutorials/procedural-grid/

09-27 08:46