Unity3d 纹理映射?

Unity3d 纹理映射?,unity3d,texture-mapping,Unity3d,Texture Mapping,我有一项任务,我必须完成以下工作: 在场景中至少创建5个UI对象和3个3D对象,然后导入 至少8个不同的纹理图像文件。如果你 只想创建3个3D对象,它们必须是一个立方体,一个 球体和一个圆柱体。为对象指定不同的纹理 编写脚本以读取场景中用作纹理的所有图像文件的信息,并生成一个包含场景中所有使用的纹理图像文件的纹理图像文件 扩展上面编写的脚本文件,以便能够自动正确地将新的单个纹理图像文件映射到所有纹理对象 我很确定我可以做第一个没问题,但我不确定脚本部分。我查阅了关于这个主题的教程,但它们只讨论将

我有一项任务,我必须完成以下工作:

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

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

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


  • 我很确定我可以做第一个没问题,但我不确定脚本部分。我查阅了关于这个主题的教程,但它们只讨论将纹理应用于对象,而没有讨论脚本编写。有人知道有什么视频或网页可以帮助我学习这一部分吗?

    第二项可以通过使用
    GameObject[]allObjects=UnityEngine.Object.FindObjectsOfType()
    迭代场景中的每个
    GameObject
    来实现,然后通过访问它们各自的
    Material.mainTexture
    property()获取它们的
    Texture2D
    ,这将给出所有使用的
    Texture2D
    s的数组。下一部分

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

    这是含糊不清的。它可以以您认为合适的任何方式生成一个纹理图像,例如,将所有纹理图像放置在一行左右。但是,这可能引用了纹理图集功能,在这种情况下,您需要查看
    Texture2D.PackTextures
    函数。此函数将把所有给定的纹理(a
    Texture2D[]
    )打包到一个图集中,并将UV坐标数组返回给您

    返回

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

    这是解决3号问题的关键。 如果将生成的压缩纹理指定回sene中的3D对象,则UV坐标是正确的,这样您将只看到它在开始时的部分纹理。将适当的UV坐标从
    Rect[]
    函数提供给您的
    PackTextures()
    分配回对象(一个Rect中有两个
    Vector2
    ,一个是
    X/Y
    (顶点),另一个是您需要的
    U-V
    (tex-coord)),任务应该得到解决


    (紫外线部分的参考:)

    我一定会试试这个