Unity问答

Unity3D教程:2D游戏技能特效

Posted on 2013年05月21日 by U3d / Unity3D 基础教程 /被围观 1,901 次

在我们的2D图形游戏中不可缺少大量的光影、技能特效,像Diablo II中的魔法效果的实现,幸好我们拥有强大的CPU来为我们实现Alpha混合与色彩饱和混合,接下来让我们来讨论一下如何用这些方法来实现我们游戏中所需要的技能特效。

一、Alpha混合特效

Alpha混合可以让我们让我们将一张图象按一定程度的比例与另一张图象进行混合(如图 1),但普通的Alpha混合并不适合游戏中的技能特效的显示,这时候我们只需要添加一些数据让混合更准确些,为了实现这样的效果,我们往图象中加入 Alpha通道数据(如图2),然后我们再根据通道数据来进行混合就可得到如图3的混合效果,现在看起来是不是更像特效了。

不过问题始终还是有的,只要仔细观察,不难发现在图3中的特效周围有黑影,这似乎给我们的技 能效果添加了一点瑕疵,为什么会这样?因为我们的程式是根据图象上的通道数据来进行不同程度的Alpha混合处理,但在特效边缘实际上RGB色彩值更接近 于黑色(R=0、G=0、B=0),一旦这样混合后,周围肯定会产生黑边,不过可以放心,这里我们可以用一个简单的技巧来轻松避免黑边的产生,那就是将图 2中的RGB色彩图用灰色背景来填充,这样在混合之后就没有黑边,至少看起来没有以前明显了,这里没有最后效果图,最后的效果还是由你自己的程式来实现 吧。

Unity3D教程:2D游戏技能特效

图1:普通的整图Alpha混合

Unity3D教程:2D游戏技能特效

图2

Unity3D教程:2D游戏技能特效

图3:Alpha+通道混合的效果

 

Unity3D教程:2D游戏技能特效

图4:色彩饱和处理的效果

二、色彩饱和特效

与Alpha混合相比,色彩饱和更适合于特效的制作,无论从性能上讲,还是从效果上说,色彩饱和比Alpha混合更胜一筹(如图4)。可能因为色彩饱和的算法过于简单,很少有进行介绍的,我们先就对色彩饱和的方法来进行介绍一下,混合公式:

R1、G1、B1 : 图象像素点的源色值;

R2、G2、B2 : 底图像素点的源色值;

R = R1 + R2;( IF R > 255 THEN R = 255 )

G = G1 + G2;( IF G > 255 THEN G = 255 )

B = B1 + B2;( IF B > 255 THEN B = 255 )

R、G、B就是我们所需的混合结果。

可能你会觉得这么复杂的计算怎么会在性能上优于Alpha混合,当然,如果你所使用到的 只是CPU的常规指令,那的确,在性能上没有Alpha快,但现在MMX指令已经作为CPU的基本指令,MMX指令中就有一个饱和加的CPU指令,可以非常方便的进行操作,不得不感谢CPU制造商所做的功劳。

好了,两种方式都介绍了,可以说这基本上已经可以胜任2D游戏中所需要,接下来就让我们来让游戏更精彩。

Unity3D教程:2D游戏技能特效:等您坐沙发呢!

发表评论