我是程序网格生成和精灵地图集uv映射的新手。因此,我不知道我想到的解决方案是否有效,合乎逻辑且是最好的方式,或者两者都不是。
我目前正在制作程序性瓷砖地图" engine-y"在Unity中。几天前我在这里有一个问题,(我问是否使用网格或多个精灵对象),根据给定的答案,我现在正在进行网格生成方式。
我已经在脑海中创建了基础结构框架。我甚至制作了一些原型。我将通过精灵地图集中的相应图块映射每个四边形的UV。 (如果有更好的方法,请不要犹豫告诉^^)
但我有动画它们的问题。例如,对于"水型"瓷砖,这将是一个动画的场景,将有不同的"框架"精灵 - 地图集中的水精灵。
所以,我正在考虑更新"那个""紫外线位置移动到地图集中的水精灵的下一帧。 但我不确定这是不是一个好方法。在更新周期中这样做是否合乎逻辑?即使动画速度较慢,它也会在更新周期中更新很多uv点。
如果我在游戏中动了出来,并且屏幕上有100x100 = 10.000水砖,(10.000 quads * 4 = 40.0000 uv点需要更新),当我更新那么多时会对性能产生影响紫外线位置?
或者显卡是否对它进行优化以使其甚至无法识别?
如果这不是一个明智的方式,这可能不是什么,那么动画瓷砖最具逻辑性和专业性的方式是什么?
注意:使用着色器计算它可能有也可能没有解决方案,但我对着色器编程一无所知,所以如果最好的解决方案是使用着色器,我不会犹豫要去学习它。如果是这样,请提供着色器编程和UV更新的培训资源。 (如果重要的话,Unity使用ShaderLab作为着色器)
答案 0 :(得分:2)
更新UV位置是进行此动画的好方法。我认为这不会导致性能问题。
然而,这是另一种需要考虑的方法。让你的水成为一种独立的材料,只有一块瓷砖的质地宽,但要像你想要的那样高。为水纹理构建四边形网格,将UV设置为纹理高度的一个图块。现在,在材质属性中,只需更改每个框架上纹理的Y偏移。让所有的紫外线独自存在; Y偏移将有效地添加到每个顶点的V值。您甚至可以在每个帧上以小增量更改它(小于整个图块的值),以获得黄油般平滑的动画,而无需触摸网格。
当然,成本是它是一个单独的材料,因此是一个单独的绘图调用。但是人们总是对抽奖电话过于夸张。
如果您有多种滚动材料(例如干净的水,泥水,熔岩,神奇力量的发光河流等等),它们都可以共享相同的材料,每个纹理贴图都有一列。 (但这需要他们以相同的速率滚动。)