Unity3d 纹理映射?
我有一项任务,我必须完成以下工作:Unity3d 纹理映射?,unity3d,texture-mapping,Unity3d,Texture Mapping,我有一项任务,我必须完成以下工作: 在场景中至少创建5个UI对象和3个3D对象,然后导入 至少8个不同的纹理图像文件。如果你 只想创建3个3D对象,它们必须是一个立方体,一个 球体和一个圆柱体。为对象指定不同的纹理 编写脚本以读取场景中用作纹理的所有图像文件的信息,并生成一个包含场景中所有使用的纹理图像文件的纹理图像文件 扩展上面编写的脚本文件,以便能够自动正确地将新的单个纹理图像文件映射到所有纹理对象 我很确定我可以做第一个没问题,但我不确定脚本部分。我查阅了关于这个主题的教程,但它们只讨论将
我很确定我可以做第一个没问题,但我不确定脚本部分。我查阅了关于这个主题的教程,但它们只讨论将纹理应用于对象,而没有讨论脚本编写。有人知道有什么视频或网页可以帮助我学习这一部分吗?第二项可以通过使用
GameObject[]allObjects=UnityEngine.Object.FindObjectsOfType()
迭代场景中的每个GameObject
来实现,然后通过访问它们各自的Material.mainTexture
property()获取它们的Texture2D
,这将给出所有使用的Texture2D
s的数组。下一部分
并生成一个纹理图像文件,该文件包含场景中使用的所有纹理图像文件
这是含糊不清的。它可以以您认为合适的任何方式生成一个纹理图像,例如,将所有纹理图像放置在一行左右。但是,这可能引用了纹理图集功能,在这种情况下,您需要查看Texture2D.PackTextures
函数。此函数将把所有给定的纹理(aTexture2D[]
)打包到一个图集中,并将UV坐标数组返回给您
返回
Rect[]包含每个输入纹理在图集中的UV坐标的矩形数组,如果打包失败,则为null
这是解决3号问题的关键。
如果将生成的压缩纹理指定回sene中的3D对象,则UV坐标是正确的,这样您将只看到它在开始时的部分纹理。将适当的UV坐标从Rect[]
函数提供给您的PackTextures()
分配回对象(一个Rect中有两个Vector2
,一个是X/Y
(顶点),另一个是您需要的U-V
(tex-coord)),任务应该得到解决
(紫外线部分的参考:)我一定会试试这个