我目前正在使用一种映射工具,它将为我的游戏生成自定义地图。我已经使网格生成工作正常,但是我看不出如何正确地对我的脸进行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);
}
在这里,由于飞机处于yz平面,所以我选择了.z和.y。该代码的作用是,找到矩形的较小臂并根据该矩形拟合纹理。
这是结果的屏幕截图:
这是我使用的纹理:
我从这里学到了这一点:
http://catlikecoding.com/unity/tutorials/procedural-grid/