我正在尝试制作逼真的程序生成建筑。到目前为止,我已经为它们制作了纹理生成程序。我想将该纹理应用于Unity中的简单cube
,但是,我不想将纹理应用于所有面。目前,当我将纹理应用于cube
的材质时,它会对所有面应用相同的纹理,而在某些面上,纹理是颠倒的。您是否建议我制作plane
个对象并将纹理应用于每个对象(并以此方式形成立方体)。我知道这会起作用,但大规模有效吗?或者有没有办法在C#
?
答案 0 :(得分:3)
考虑到您正在尝试创建建筑物,您应该在程序上生成自己的“立方体”/建筑物网格数据。
例如:
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
public Vector3[] newVertices;
public Vector2[] newUV;
public int[] newTriangles;
void Start() {
Mesh mesh = new Mesh();
mesh.vertices = newVertices;
mesh.uv = newUV;
mesh.triangles = newTriangles;
GetComponent<MeshFilter>().mesh = mesh;
}
}
然后填充顶点,并使用数据填充tris。 例如,您可以使用:
在原点0周围创建一个小的1 x 1多维数据集int size = 1;
newVertices = new Vector3[]{
Vector3(-size, -size, -size),
Vector3(-size, size, -size),
Vector3( size, size, -size),
Vector3( size, -size, -size),
Vector3( size, -size, size),
Vector3( size, size, size),
Vector3(-size, size, size),
Vector3(-size, -size, size)
};
然后因为你只想在1个网格面上渲染纹理;
newUV = new Vector2[]{
Vector2(0,0),
Vector2(0,1),
Vector2(1,0),
Vector2(1,1),
Vector2(0,0),
Vector2(0,0),
Vector2(0,0),
Vector2(0,0),
Vector2(0,0),
Vector2(0,0),
Vector2(0,0),
Vector2(0,0)
};
请注意,仅为某些顶点分配UV坐标这将有效地仅将所需纹理放置在其中一个面上,然后根据您分配tris的方式,其余的UV可以根据您的需要进行更改看起来好像没有纹理。
请注意我用IDE编写了这个,因此可能存在一些语法错误。此外,这不是最直接的过程,但我保证它远远超过了一系列四边形作为建筑物的使用,因为这样你可以轻松制作出各种各样的形状。&#39;
资源:
http://docs.unity3d.com/ScriptReference/Mesh.html
https://msdn.microsoft.com/en-us/library/windows/desktop/bb205592%28v=vs.85%29.aspx
http://docs.unity3d.com/Manual/GeneratingMeshGeometryProcedurally.html
答案 1 :(得分:0)
AFAIK团结本身并不支持这一点。
但是有一些简单的方法可以解决。您使用plane
的示例是一个很好的想法,但使用quad
会更有意义。或者甚至更容易,将多面立方体创建为模型并将其导出为例如.fbx