请选择 进入手机版 | 继续访问电脑版

 找回密码
 点一下
查看: 3121|回复: 33

War3与SC2的单位碰撞形状区别,以及War3 Mod的“十字围杀

[复制链接]
发表于 2015-1-4 10:32:58 | 显示全部楼层 |阅读模式
本贴原作为回帖发表于这个帖子里的回复里:
http://bbs.islga.org/read-htm-tid-2219371-page-1-fpage-1.html


但由于内容比较多,而且是科普性质的,所以在dada同学的建议下单独分割出了这个帖子:


关于单位碰撞和War3 Mod十字围杀


War3的十字围杀之所以能成立是因为war3的碰撞是由一个个小方形近似出来的。而且长度必须是小方形的倍数。







图片比例有所夸张,但十字围杀本质上就是这么回事儿。



但sc2则是完全自由的圆形,因此空隙就大一些。而且没有最小单位的说法,圆的大小相当自由。但是相对的,东西,西南,东南,东北四个方向就容易被找出空隙而逃出去。



但是要注意的是,war3并不是刻意做成方形的,而是当时的3d游戏技术不够,才勉强那样子模拟。实际上war3本来就是希望做成圆形碰撞的。实际上在编辑器里war3单位的碰撞表示还是圆形,但实际进了就游戏以后就无法动态地实现圆形碰撞,只能以方形来模拟。

实际上很有趣的一点是,虽然在编辑器里单位有着各种各样的碰撞数据,但实际上实际游戏里只有2-3种。比如农民的碰撞是16数据,步兵的碰撞是31数据,你显然会认为农民的碰撞比步兵小了一半,但实际游戏里它们却是一样的。而火枪手的碰撞数据是32,看似只比步兵大了1/32,但实际上却是大了整整一倍。


那是因为其实16就是最小方块。每小于16算成16。每满16就算成下一个16。所以呢,农民的碰撞看似是16,实际却是32(因为它大于等于16)。步兵的碰撞数据是31,但是由于没到32,所以还是32。火枪手是32,所以跳到了48。

所以结果这三个数字只有32和48两档。顺便攻城坦克写着48,实际却是64


所以war3的碰撞数据其实是相当不科学的。数字不准还跳档。而十字围杀的效果这么好其实也并非是设计本意,是模拟结果不完美所致。

============以上是原理分析==============

当然这东西已经是既成事实,所以可能有些电竞向的玩家会更愿意能在sc2里面再现这个东西。但是显然,回过头去采用小方格子是不现实的,先不说sc2的圆形碰撞是早已写死的代码。就算强行用触发器来模拟,根本就是找死。这游戏会卡得不能玩的。你让那些自定义地图怎么办?

那么,就没有其他方法了吗?我们这里再来考察一下,为什么sc2标准对战里做不到十字围杀?是否可以解决那些因素?

原因1:单位“软碰撞”范围太大了。有时候很多单位站在一起后,除了默认间隔外,其实可以挤得比默认间隔更小。

解决方案——把软碰撞的范围去掉就好了呗。


原因2:己方部队可以互相推开,有时候你一个兵站好了位置,结果在摆队形的时候被另一个兵给推开了,这样阵型就散了,没法形成“墙了”,敌人可以从缝隙里溜出来。

解决方案——所以,我在war3 Mod的标准对战中关闭了“己方推挤”的功能。(但是你依然可以在自定义游戏里使用这个功能)。

原因3:因为碰撞是圆的,所以相比方形模拟出来的碰撞,东西、西南、南北、东南的空隙较大。

解决方案——其实说穿了也简单,我们把每个陆军的碰撞半径改大一点,用来补偿这一点就好了。当然也不能改的太大,毕竟这样单位的水平距离就会拉远了。由于war3的碰撞原是方形,所以我们只要让碰撞圆的大小为原方形的外接圆便可完全填满四个斜向角落的所有空隙。不过这样一来会让单位在正方向上显得太胖。

而做成内接圆则正方向上距离能保证一致,而且这才是最符合war3原始设计的情况,只是斜向空隙会变得较大。





所以,目前的方案是……

——小学学的圆面积公式还记得吧

S=π*(r)^2

目前我在war3Mod里使用的单位碰撞圆面积就是保证了与war3的对应方块的面积一致,这样既大于内接圆又小于外接圆——中庸之道。


所以,来试试看效果如何?








不错吧?非但出不去,而且四个角落还可以随便站,斜着站也可以,只要成互相垂直的十字就行,不像war3那样必须站X Y轴正向才能发挥最大效果。



因此这个War3 Mod,尽管没有完全复刻war3的方形碰撞,依然可以实现那种十字围杀。其实只要去掉了软碰撞和己方推挤,很多问题就可以迎刃而解。

当然,这个方案还有待今后正式发布后的在线测试来吸收反馈和进一步完善,毕竟,一切都要以实际测试为准。


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

本版积分规则

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

GMT+8, 2024-3-29 14:58 , Processed in 0.095564 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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