与其他级别相比,整个环境的单独/不同纹理

时间:2017-06-27 18:56:34

标签: unity3d graphics textures unity5 mesh

我对团结完全陌生,所以需要你的帮助。我有一个第一层有草的纹理的环境,这是完美的,现在我想给雪区外观&通过在环境中使用沙漠纹理,在整个环境中使用雪纹理进行​​二级和三级环境,对环境进行沙漠观察。

我面临的困难是环境有数百个与网格渲染器的游戏对象。我几乎不可能访问数百个网格渲染器并使用脚本分配纹理。

任何人都可以为这种情况提供简单而最佳的解决方案。

2 个答案:

答案 0 :(得分:0)

通常情况下,为您正在构建的场景制作不同材质的不同预制件是很常见的。但如果唯一的区别是纹理,那么有一个非常简单的解决方案:

MeshRenderers共享材质,这意味着对材质纹理的更改应该会导致所有使用该材质的MeshRenderers进行更新。

更改此纹理(编辑器之外)的最简单方法是在每个场景上都有一个脚本,可以更改材质以获得所需的纹理。像这样:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TextureSetter : MonoBehaviour
{
    public Material materialToChange;
    public Texture targetTexture;

    private void Awake()
    {
        materialToChange.SetTexture("_MainTex", targetTexture);
    }
}

当您运行游戏时,您应该看到所有具有您设置的材料的对象更新:

从这里开始: enter image description here

当你运行游戏时: enter image description here

答案 1 :(得分:0)

非常感谢@Thomas Bartlett回答。 你的答案告诉我解决问题的方法。 在你的情况下,我想,去每个具有网格渲染器的游戏对象并访问材料并改变纹理会有点冗长。 我发现他们是一个简单的方法。

利用插件"简单的网格组合器",它将在单个空游戏对象上组合环境中所有网格渲染器上使用的所有材质,如附图所示。

在单个游戏对象上获取所有材料后,将脚本附加到该单个游戏对象上,并访问@Thomas Bartlett脚本和Enjoy中显示的材料。 :) Image

获取插件的链接网格组合器如下所示

Link

他们可能是另一种方法是制作一种纹理的图集(让我们看看草的外观和感觉环境)和另一种用于雪的外观和感觉环境的地图集,只需根据水平或要求替换地图集。但我没有应用这个解决方案,我希望它也会起作用)

谢谢:)