【问题标题】:Apply Textures to Only Certain Faces of a Cube in Unity在 Unity 中仅将纹理应用于立方体的某些面
【发布时间】:2016-04-26 11:25:06
【问题描述】:

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

【问题讨论】:

  • 你为什么不代替选择的答案,只为一个游戏对象创建你自己的立方体网格数据,然后只将纹理应用于其中一个面。??
  • 我不太确定您的建议。你能再解释一下吗?
  • 请看我的回答。

标签: c# unity3d 3d textures unity5


【解决方案1】:

考虑到您正在尝试创建建筑物,您应该按程序生成自己的“立方体”/建筑物网格数据。

例如:

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 的情况下编写的,因此可能存在一些语法错误。此外,这不是最直接的过程,但我保证它远远超出了将一系列四边形用作建筑物的范围,因为这样您可以“轻松”制作各种形状。

资源:

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

【讨论】:

  • 好的,我明白你的意思了。实际上使用 uvs 和顶点制作网格。这种方式肯定看起来更好(对不起,MX D)。感谢您的澄清。
  • @dsiegler19 使用此方法,您可以完全控制您创建的资产,而无需在编辑器中摆弄四边形/平面。您甚至可以通过在对象顶部创建金字塔然后将其绑定到建筑物的顶角来轻松制作屋顶,它将有效地与建筑物的 x 和 z 缩放!潜力巨大!
【解决方案2】:

AFAIK unity 本身并不支持这一点。

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

【讨论】:

  • 好的,谢谢。当我刚刚在场景视图中构建了一个带有平面的立方体时,其中一些会暂时变得不可见,让你看到它后面的平面。您知道如何禁用此功能吗?
  • @dsiegler19 是的,当您使用quads 时不应出现此问题。另请注意,内置平面有 121 个顶点和 200 个三角形,而四边形有 4 个顶点和 2 个三角形
猜你喜欢
  • 1970-01-01
  • 2013-10-10
  • 2015-03-17
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多