找回密码
 点一下
查看: 2304|回复: 5

作者该如何力所能及的以可用的手段尽可能优化地图卡顿问题?

[复制链接]
发表于 2019-7-8 14:31:27 | 显示全部楼层 |阅读模式
本人最近发布了新的地图,图名《拯救田所浩二星 -AlphaTest》,游戏大厅可以搜到。
QQ图片20190708141744.jpg
简单介绍地图的基本情况:这是一副6人的丧尸防守反击地图,地图大小是256x256,装饰物>5000个,使用了合作依赖项,根据玩家的选择有对应的指挥官单位和技能面板。
——
玩家1-6是用户,7是玩家友军AI(该友军开启的是对战AI)
8-12是中立AI有完整的预设基地和单位(其中,9,10,11,12这4个每局只会随机挑选2个AI运行“启动战役AI”,另外2个是不开启AI也就是不占用资源的)
而13,15则是敌军AI。13为虫群,有3个完整的预设城镇,人口限制被设置在150。触发器不会给虫群刷兵,完全放养状态。15是感染者,只有少量预设建筑,单位靠刷兵触发完成,且开启全局自毁。

——
①、然而,这地图,一到晚上,感染者开始刷兵和单位自毁的时候,就非!常!卡!有时候甚至能卡成PPT。
——
②、于是本人先做了这样的设置:删除全部感染者的刷兵建筑,不再多建筑刷兵,而是只由固定地点的一个无敌建筑进行,命令该单位向刷兵区域投掷空投囊。
③、但!还!是!很!卡
④、于是老娘就在想是不是单位实在太多了,所以又做了这样的设置:首先大量减少刷兵量,其后无论游戏进行到什么时候,都只会刷同一个数量的兵(比如第一天会刷1个枪兵,第10天也依然只刷1个枪兵)。但是,越到后面就会给感染者的单位附着更强大的行为增益,以此来达到“一个人就是一支军队”的效果
⑤、然!而!还!是!卡!
⑥、行吧,于是老娘又做了个检测系统。如果某个玩家防守区域失守,那玩家彻底挂了(当然他可以飞基地,但是单位组检测只检测区域内的存活玩家建筑),那么它那个区域刷怪指令就不会运行了,以此避免玩家减员后刷兵数量还是一样多的问题,来减少卡顿
⑦、可!它!还!是!卡!啊!
⑧、于是老娘又做了如下设置
  • 把感染响尾蛇的那条黄黄的移动残留物删了,据说那个很卡
  • 把感染枪兵直接删了,据说疾病弹药也很卡
  • 感染的平民也直接删了
  • 限制了感染者AI的APM
  • 整合了大部分使用同种类触发事件的触发器
  • 每次刷兵就清除一次地图上的粒子效果,死亡单位
  • 每次白天来的时候就直接杀光感染者的残余单位
※添加一个投票,投票通过时【彻底移除全地图所有装饰物】关闭地图的所有水体,并且本局游戏中强制清除物理效果,物理运算,死亡模型,布娃娃死亡模型,禁止播放死亡动画
⑨、然后做了那么多之后它还是卡
草(中国语)
————————————————
————————————————
所以余就想问问各位同僚,你们还有什么优化的好主意吗?以余的实力余实在想不出还能做什么了。
——
再说个个人的猜测,自毁动作是“AI会不断搜寻最近的敌方单位并自杀式攻击”,这是否意味着“不断搜寻”这个过程会占用大量运算资源?假如是这样,那不再用触发器刷兵和自毁指令,而是给感染者设置AI性格里的进攻波次,让感染者自己建造单位和攻击,会不会让游戏流畅点?(虽然这样刷兵系统相当于重写,但如果能变流畅那就是值得的)
毕竟,连8700k+2070的配置都不能满帧,那还有几个人能流畅游玩这地图呢?这个优化问题实在是太紧迫了。
以上,望释疑


发表于 2019-7-9 18:03:43 来自手机 | 显示全部楼层
根据你的描述,你的卡顿不是演算体造成的,而是计算量太大了,建议:尽量降低周期性事件的频率,ai系统对总体下命令,少弄复杂的演算体(如一堆模型组合或位置偏移运算),不要使用单位自毁,而是手动命令单位进攻

点评

嗯,谢谢你的回复,余现在正在尽力地整合或删除不必要的全局变量,可换用局部变量的都换用,整合并尽可能削减计时器类事件,删除了几个用触发器做的技能然后用数据重做了次来减少触发的运算,并且使用预设的AI波次让  详情 回复 发表于 2019-7-9 23:11
回复

使用道具 举报

 楼主| 发表于 2019-7-9 23:11:10 | 显示全部楼层
超级007x 发表于 2019-7-9 18:03
根据你的描述,你的卡顿不是演算体造成的,而是计算量太大了,建议:尽量降低周期性事件的频率,ai系统对总 ...

嗯,谢谢你的回复,余现在正在尽力地整合或删除不必要的全局变量,可换用局部变量的都换用,整合并尽可能削减计时器类事件,删除了几个用触发器做的技能然后用数据重做了次来减少触发的运算,并且使用预设的AI波次让AI自己造兵进攻,希望这些全部做完之后能对卡顿有所改善
回复

使用道具 举报

发表于 2019-7-13 20:04:54 | 显示全部楼层
全局变量应该影响不大(不过要注意数组维数,2维和3维的数组尽量要能用多少用多少,不要一下子设置几百个维数)

每条触发器的末尾 加一条 关闭当前触发器 ,可以回收掉这个触发,减少内存消耗. 不过你要确保这个触发只用一次. 多次使用可以 用运行xxx触发之类的,自己研究.....
初始载入的时候没有用的触发可以初始先关闭,用到的时候再启用触发.能加快载入速度.

重复性的运算多用函数 动作 少用触发

触发器千万条,优化就一条,常看调试窗口,不然做图两行泪.

调试窗口可以直观的告诉你每条触发器,变量等等运算量的大小,该删就删,该精简就精简.
周期性时间尽量不要同时触发.菜单栏的地图-地图选项里选项也有 错开周期性触发事件 你可以选上这个,就会自动优化周期性事件了.
回复

使用道具 举报

发表于 2019-7-15 11:32:51 | 显示全部楼层
星际2以前有个外号叫单核争霸 不知道是不是真的
回复

使用道具 举报

发表于 2019-11-12 21:19:58 | 显示全部楼层
你的地图并不复杂,很可能是触发器事件中的代码,与触发器事件相互调用,造成递归调用,陷入死循环了。

比如你在触发器里对某个单位发布指令,而这个单位被发布指令时,又会触发这个触发器,触发器继续对单位发指令,SC2是多线程处理的,一开始不会很明显,后面会越来越卡。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-11-23 16:11 , Processed in 0.065411 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表