我有一项任务,我必须执行以下操作:
在场景中创建至少5个UI对象和3个3D对象,然后导入 每个至少8个不同的纹理图像文件。如果你 只想创建3个3D对象,它们必须是一个立方体,一个 球体和一个圆柱体。为对象指定不同的纹理。
编写脚本以读取场景中用作纹理的所有图像文件的信息,并生成包含场景中所有使用的纹理图像文件的单个纹理图像文件。
扩展上面写的脚本文件,以便能够自动正确地将新的单个纹理图像文件映射到所有纹理对象。
我很确定我可以做第一个没问题,但我不确定脚本部分。我已经查找了关于这个主题的教程,但他们只讨论了将纹理应用于对象而不是脚本编写。有谁知道任何可以帮助我学习那部分的视频或网页?
答案 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)