手机端战争迷雾的实现

先展示效果:

https://v.qq.com/x/page/k0763jy8qjr.html

最早是在war3看到战争迷雾,当时觉得真牛逼。到现在技术基本已经成熟,自己也就抽空做一个。

思路还是定在用tile来实现,毕竟从性能优化角度说,tile可以预先烘焙数据,比实时计算要快不少,这样的话手游也可以使用。

先画一批格子:

手机端战争迷雾的实现_第1张图片

有了基本的地图数据,我们就需要开始考虑怎么实现我们的战争迷雾。首先把人的坐标转化到地图坐标,先考虑最基本的圆形,根据每个格子距离人的坐标的距离和视野半径比较,我们就可以得到这个格子是否可见。为了能够实现迷雾的效果,我们需要将这些数据保存在一张贴图中。而迷雾在人运动过程中需要变化,我们需要在这个过程中提供平滑的渐变过度,首先想到的是用两张图做过度,但其实只表示可见性的话,一个通道就够了,那么我们就用r通道存储上一次的可见范围,g通道存储这次的可见范围,然后做线性插值完成过度。

这里要注意,如果半径大,计算可见性范围其实会比较耗时,特别是如果要支持障碍视野的情况下,于是我们可以将这些计算放到子线程中做。现在手机多核,特别适合去用子线程做计算量大的东西。

算出全部的视野后,我们需要做一个世界坐标到屏幕坐标的投影,注意,这里的屏幕其实是贴图那个屏幕,

手机端战争迷雾的实现_第2张图片

你可能感兴趣的:(u3d,unity,程序转TA)