splatmap纹理不适用于统一构建

时间:2014-09-01 14:09:27

标签: c# unity3d terrain

我在程序上创建我的高度图并在脚本中声明我的地形

在团结编辑器中,我的splatmaps工作得很好,但是当我构建我的地形时,它只是纯黑色。

是否有一个设置,我可能已经错过了建设,使splats工作?

编辑 http://answers.unity3d.com/storage/temp/31838-untitle2d.png

构建 http://answers.unity3d.com/storage/temp/31839-untitled.png

我使用

代码加载它们
SplatPrototype[] terrainTexture = new SplatPrototype[4]; 
        terrainTexture[0] = new SplatPrototype(); 
        terrainTexture[0].texture = (Texture2D)Resources.Load("stone");
        terrainTexture[1] = new SplatPrototype(); 
        terrainTexture[1].texture = (Texture2D)Resources.Load("sand");
        terrainTexture[2] = new SplatPrototype(); 
        terrainTexture[2].texture = (Texture2D)Resources.Load("grass");
        terrainTexture[3] = new SplatPrototype(); 
        terrainTexture[3].texture = (Texture2D)Resources.Load("snow");

编辑 我尝试将纹理添加到代码中作为变量,而不是使用resource.load,也没有工作

编辑 我找到了一个可以使它工作的工作,但不幸的是我找到了一个合适的解决方案。 任何人都可以看到可能导致问题的原因

的http:// answers.unity3d.com/questions/171150/terrain-basemap-texture-through-code.html

2 个答案:

答案 0 :(得分:0)

您需要在构建中包含一个额外的着色器。转到编辑 - >项目设置 - >图形。在检查员增加大小。在新插槽中选择Nature / Terrain / Diffuse。

您需要执行此操作的原因是Unity将搜索场景中引用的任何资产,以确定要在构建中包含哪些内容以及遗漏哪些内容。由于您的地形是按程序构建的,因此不存在地形对象且不存在地形材质,并且不包括所需的着色器。按照上面的步骤,你基本上告诉Unity无论如何要包括它,因为你知道你将需要它。

答案 1 :(得分:0)

我会在上面的答案中添加一些内容:

  1. 有一个名为TerrainData.RefreshPrototypes()的原型刷新,它应该刷新所有可用的原型,包括细节纹理和树。由于地面纹理是原型列表的一部分,这将有助于统一更新地形的新纹理。 (而且,它也适用于编辑内部。)

  2. 此外,其他人发现,当他们改变纹理'数据(即,改变像素数据),它导致统一以更新用于地形的材料。他们做了一个空白的地形,为它分配了空白的基础纹理,然后在运行时加载了高度图,splat贴图,并覆盖了纹理。这导致统一显示新创建的地形。

  3. 我希望这会有所帮助,因为大多数地形资产都是高度无证的区域(而且功能失调)......祝你好运!