【问题标题】:Is animating a tile in a tilemap (quad per tile) mesh by changing quads uv position logical and efficient?通过更改四边形 uv 位置来为瓷砖贴图(每瓷砖四边形)网格中的瓷砖设置动画是否合乎逻辑且有效?
【发布时间】:2015-09-06 22:07:08
【问题描述】:

我是从精灵图集生成程序网格和 uv 映射的新手。所以我不知道我想到的解决方案是否有效、合乎逻辑和“最佳方式”,或者两者都不是。

我目前正在 Unity 中制作程序瓷砖地图“engine-y”。几天前我在这里遇到了一个问题,(我问是使用网格还是多个精灵对象)并且根据给定的答案,我现在正在使用网格生成方式。

我已经在脑海中创建了基本结构框架。我什至做了一些原型。我将通过精灵图集中的相应图块映射每个四边形的 UV。 (如果有更好的方法,请不吝赐教^^)

但我在为它们设置动画时遇到了问题。例如,对于一个“水型”瓦片,当然要进行动画处理,在精灵图集中会有不同的水精灵“帧”。

所以,我正在考虑更新“那个四边形的”UV 位置以转移到地图集中水精灵的下一帧。 但我不确定这是否是一个好方法。在更新周期中这样做是否合乎逻辑?即使动画速度很慢,它也会在一个更新周期中更新很多 uv 点。

假设我在游戏中缩小,并且屏幕中有 100x100 = 10.000 个水块,(10.000 个四边形 * 4 = 40.0000 个要更新的 uv 点),当我更新这么多内容时会对性能产生影响吗紫外线位置?

或者显卡是否对其进行了优化,以至于它甚至不明显?

如果这不是一种明智的方式,也可能不是,那么最合乎逻辑和最专业的瓷砖动画方式是什么?

注意:通过着色器计算可能有也可能没有解决方案,但我对着色器编程一无所知,所以如果最好的解决方案是使用着色器,我会毫不犹豫地学习它。如果是这样,请提供着色器编程和 UV 更新的培训资源。 (Unity 使用 ShaderLab 作为着色器)

【问题讨论】:

    标签: animation unity3d sprite uv-mapping


    【解决方案1】:

    更新 UV 位置是制作此动画的好方法。我认为这不会给您带来性能问题。

    但是,这里有另一种方法可供考虑。让你的水成为一种单独的材料,只有一块瓷砖的纹理那么宽,但你想让它有多高。为水纹理构建一个四边形网格,UV 设置为纹理高度的一个瓦片。现在,在材质属性中,只需更改每一帧纹理的 Y 偏移量。不理会所有的紫外线; Y 偏移将有效地添加到每个顶点的 V 值。您甚至可以在每一帧上以较小的增量进行更改(小于整个图块的值),以获得黄油般流畅的动画,而无需完全触摸网格。

    当然,代价是它是一个单独的材料,因此是一个单独的绘图调用。但无论如何,人们往往对绘图调用大惊小怪。

    如果您有多种滚动材质(例如清水、泥水、熔岩、魔法力量的发光河流等等),它们都可以共享相同的材质,每列纹理贴图。 (但这将要求它们以相同的速度滚动。)

    【讨论】:

      猜你喜欢
      • 2018-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-26
      • 1970-01-01
      相关资源
      最近更新 更多