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

时间:2017-08-16 05:00:15

标签: c# unity3d mesh uv-mapping

我目前正在使用一种地图工具,可以为我的游戏生成自定义地图。我已经完美地完成了网格生成,但我无法弄清楚如何正确地对我的面部进行UV贴图以使纹理保持一致。我已经通过使用相应的坐标对完美地在地板上工作UV图,但是墙看起来效果不一样。

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

以下是我目前墙壁的一些例子: enter image description here enter image description here

我目前正在使用它进行墙壁的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));

2 个答案:

答案 0 :(得分: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);    
    }

在这里,我选择 .z .y ,因为我的飞机在yz飞机上。这段代码的作用是,找到矩形的较小臂并根据它拟合纹理 这是结果的屏幕截图: enter image description here

这是我使用的纹理:
enter image description here

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

答案 1 :(得分:1)

我已经成功解决了这个问题。我最终做的是取顶点的 X Z ,并根据墙的方向取两者的重量,最后得到结果我想

        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));

enter image description here