纹理映射?

时间:2015-10-11 22:01:24

标签: unity3d texture-mapping

我有一项任务,我必须执行以下操作:

  1. 在场景中创建至少5个UI对象和3个3D对象,然后导入 每个至少8个不同的纹理图像文件。如果你 只想创建3个3D对象,它们必须是一个立方体,一个 球体和一个圆柱体。为对象指定不同的纹理。

  2. 编写脚本以读取场景中用作纹理的所有图像文件的信息,并生成包含场景中所有使用的纹理图像文件的单个纹理图像文件。

  3. 扩展上面写的脚本文件,以便能够自动正确地将新的单个纹理图像文件映射到所有纹理对象。

  4. 我很确定我可以做第一个没问题,但我不确定脚本部分。我已经查找了关于这个主题的教程,但他们只讨论了将纹理应用于对象而不是脚本编写。有谁知道任何可以帮助我学习那部分的视频或网页?

1 个答案:

答案 0 :(得分:0)

通过使用GameObject遍历场景中的每个GameObject[] allObjects = UnityEngine.Object.FindObjectsOfType<GameObject>(),然后通过访问各自的Texture2D属性doc来获取Material.mainTexture,可以实现2号。 }),这将给出所有使用过的Texture2D的数组。下一部分

  

并生成单个纹理图像文件,其中包含场景中所有使用过的纹理图像文件

是暧昧的。它可以以您认为合适的任何方式完成,从而生成一个纹理图像,例如,将它们全部放在一排左右。但是,这可能会引用纹理图集功能,在这种情况下,您需要查看Texture2D.PackTextures函数右here。此函数会将所有给定纹理(一个Texture2D[])打包到一个图集中,并将返回一个UV坐标数组给您。

  

<强>返回

     

Rect []一个矩形数组,包含每个输入纹理的atlas中的UV坐标,如果打包失败,则为null。

这是解决3号问题的关键。 如果您将生成的打包纹理分配回sene中的3D对象,那么UV坐标是正确的是非常的,因此您将只看到它在开头具有的纹理部分。将Rect[] PackTextures()函数提供给您的对象分配正确的UV坐标(矩形中有两个Vector2,一个将X/Y(顶点),另一个将是你需要的U-V(tex-coord),并且任务应该被解决。

(UV部分的参考:http://answers.unity3d.com/questions/276212/what-is-the-simple-way-of-applying-texture-atlas-t.html