Answers:
实现此目的的一种方法是使用Alpha贴图在两个背景之间混合。一种简单的方法是呈现“后”(隐藏)背景,然后呈现“前”(最初可见)背景。使用前背景的Alpha通道或单独的Alpha纹理来控制前背景的透明度,就像处理任何透明或半透明Sprite一样。如果此Alpha贴图小于1,则背景的一部分将显示出来。
然后,只需根据您想要的效果构建该Alpha贴图即可。在您展示的视频中,看起来这样的地图是采用“绘画”方式构建的。这可能涉及随机放置零alpha的圆(在其边缘处羽化为1.0 alpha)。开始将这些圆圈紧紧围绕显露的原点倾斜,并随着时间的流逝放松该偏斜,使其向外散开。在执行此操作时,您可能还需要扩大圆的半径。
您可以根据需要调整此方法,以根据您的需求调整效果。例如,普通的圆圈可能看起来有点太“斑点”,而您可能想将随机选择的预先创作的“画笔描边”标记在蒙版中。即使是随机放置本身也可能看起来有些混乱,您可以选择沿某些预先编写的曲线或样条冲压Alpha蒙版以突出显示特定样式。
我会在SpriteRenderers上使用自定义着色器来实现此目的,该着色器具有两种纹理,每个要在其间进行转换的版本均具有一种纹理。
(即使使用此效果在两个以上的状态之间进行转换,我仍然会尝试构建游戏的结构,因此我们一次只需要两个即可进行渲染:旧状态和下一个状态。我们将让该过渡进行完成之前,我们需要让玩家启动向第三状态的过渡,此时我们可以替换以前的“旧”状态,因为它不再可见)
此着色器将使用第三个单通道纹理作为效果的蒙版在两个纹理之间进行淡入淡出(例如,黑色= 100%旧状态,灰色= 50/50混合,白色= 100%新状态)。我会在屏幕空间中映射此蒙版纹理。
然后,我将设置第二个相机以渲染到RenderTexture,以生成此蒙版。第二个摄影机将与我的主摄影机一起移动并匹配其FoV /正射影像大小,因此我认为任何动画都适用于整个世界,并始终显示蒙版。该摄影机将在我的主摄影机之前渲染,并且被设置为仅查看特别指定的“显示”层上的内容。在视频示例中,看起来他们使用粒子系统将少量的云形状喷溅到此显示纹理中,并随着时间的推移而扩展,从而使过渡具有有机的扩展边缘。