将纹理仅应用于Unity中多维数据集的某些面

时间:2016-04-26 11:25:07

标签: c# unity3d 3d textures unity5

我正在尝试制作逼真的程序生成建筑。到目前为止,我已经为它们制作了纹理生成程序。我想将该纹理应用于Unity中的简单cube,但是,我不想将纹理应用于所有面。目前,当我将纹理应用于cube的材质时,它会对所有面应用相同的纹理,而在某些面上,纹理是颠倒的。您是否建议我制作plane个对象并将纹理应用于每个对象(并以此方式形成立方体)。我知道这会起作用,但大规模有效吗?或者有没有办法在C#

中将不同的纹理应用于多维数据集的各个面

2 个答案:

答案 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