英雄联盟,作为一款火爆的MOBA类游戏,其一大特色就在于玩家可以——“躲草”。用一句话来概括躲草,那就是:当玩家控制的英雄躲入地图中的草丛,则对敌形成 隐身效果,达到埋伏、偷袭的效果。笔者有幸参与了一款基于Unity引擎的MOBA游戏的研发,并负责躲草系统的设计与实现。下面简单介绍一下个人设计思路,欢迎大家前来交流!
首先,作为一款长连接网络游戏,几乎任何功能都是由服务端和客户端两部分来完成的,至于草丛系统,有两种设计思路:
1.数据及主要逻辑部分放在客户端,服务端仅做简单调整。这种写法的好处是减轻服务端运算及网路通讯压力,坏处是有可能因为外挂而在本地窥探到隐藏的敌人,而让敌方无法察觉。
2.数据及主要逻辑部分放在服务端,客户端仅需依靠若干信号量(如是否在草中、是否隐身)来控制游戏物体的显隐。这种写法的好处是提高游戏的安全性,坏处是增大了服务器的运算和通信负担。
笔者综合了服务器性能与开发效率的考量,使用了第一种方案。
接着,理清要实现的功能模块:
1.草地区域编辑模块:
设计一种能描述草地不规则形状的直观的编辑器,利用 unity3d引擎的场景来保存数据,每一块草地都要有自己的标识ID。
2.隐身效果触发模块:
隐身效果要分半透明和完全透明两种,只要在草中,至少要半透明 (友方眼中一定是半透明),若满足隐身条件则全透明(敌方眼中);
敌方范围技能打我方躲草英雄,我方掉血但不暴露,我方躲草打敌方,则我方暴露,并给敌方 三秒钟视野;
自带隐身效果的英雄,走出草地不得解除隐身;
当我方处于隐身状态,在敌方眼中,血条特效小地图标记等等都要隐藏掉;
当敌我双方共同位于一块草 地中,双方都不能因为躲草而处于隐身。
3.AI识别模块:
我英雄一旦入草隐身,敌方AI必须忽视掉我方英雄,这个操作在服务器端完成。
草地地形编辑展示:
首先,作为一款长连接网络游戏,几乎任何功能都是由服务端和客户端两部分来完成的,至于草丛系统,有两种设计思路:
1.数据及主要逻辑部分放在客户端,服务端仅做简单调整。这种写法的好处是减轻服务端运算及网路通讯压力,坏处是有可能因为外挂而在本地窥探到隐藏的敌人,而让敌方无法察觉。
2.数据及主要逻辑部分放在服务端,客户端仅需依靠若干信号量(如是否在草中、是否隐身)来控制游戏物体的显隐。这种写法的好处是提高游戏的安全性,坏处是增大了服务器的运算和通信负担。
笔者综合了服务器性能与开发效率的考量,使用了第一种方案。
接着,理清要实现的功能模块:
1.草地区域编辑模块:
设计一种能描述草地不规则形状的直观的编辑器,利用 unity3d引擎的场景来保存数据,每一块草地都要有自己的标识ID。
2.隐身效果触发模块:
隐身效果要分半透明和完全透明两种,只要在草中,至少要半透明 (友方眼中一定是半透明),若满足隐身条件则全透明(敌方眼中);
敌方范围技能打我方躲草英雄,我方掉血但不暴露,我方躲草打敌方,则我方暴露,并给敌方 三秒钟视野;
自带隐身效果的英雄,走出草地不得解除隐身;
当我方处于隐身状态,在敌方眼中,血条特效小地图标记等等都要隐藏掉;
当敌我双方共同位于一块草 地中,双方都不能因为躲草而处于隐身。
3.AI识别模块:
我英雄一旦入草隐身,敌方AI必须忽视掉我方英雄,这个操作在服务器端完成。
草地地形编辑展示: