在 Unity 中仅将纹理应用于立方体的某些面

Apply Textures to Only Certain Faces of a Cube in Unity

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

AFAIK unity 本身不支持这个。

不过,有一些简单的方法可以解决这个问题。您使用 plane 的示例是一个好主意,但使用 quad 会更有意义。或者更简单,创建一个多面立方体作为模型并将其导出为例如 .fbx

考虑到您正在尝试创建建筑物,您应该按程序生成自己的 'cube'/building 网格数据。

例如:

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

然后用数据填充顶点和三角形。 例如,您可以在原点 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)
};

那么因为您只想在其中一个网格面上渲染纹理;

 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 坐标这将有效地仅将您想要的纹理放置在其中一个面上,然后根据您分配三边形的方式,其余 UV 可以如您所见进行更改适合看起来好像没有纹理。

请注意,我写这篇文章时没有使用 IDE,因此可能存在一些语法错误。此外,这不是最直接的过程,但我保证它远远超过使用一系列四边形作为建筑物,因为有了它你可以制作各种形状 'easily'.

资源:

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