下载 App
荒野猎人 开发者日志(五)修复游戏内容和问题
6 小时前4 浏览综合
动物模型缩放
动物模型放进猎场后被压扁拉长,狐狸变形到 2.54 倍,鹿 2.81 倍,野猪 2.80 倍。但图鉴里的预览是正常的,同一个模型两处表现不同,说明问题出在缩放代码而不是模型资源。原因是我们原来逐轴缩放,把模型硬塞进配置表里的目标长宽高,而模型自身的比例和配置表并不一致,这个差异就被放大成了形变。改法是只算一个统一系数,三个轴共用,也就是等比缩放。锚定基准要用体长,不能用最长边,因为带鹿角、长耳朵的模型包围盒偏高,用最长边锚定会让身体显得偏短。带角、长耳、长尾的物种还要把配置里的体长按含配件总高往下调,比如鹿从 1.60 调到 1.20,麋鹿从 2.55 调到 2.00。另外把个体体重差异从 0.70 到 1.30 放宽到 0.55 到 1.55,仍然按体重立方根等比。自查的办法是算最大轴缩放除以最小轴缩放,超过 1.25 就是肉眼可见的形变。
植被大小
草被横向拉伸过,最宽的到了 1.6 到 3.4 倍,芦苇被压到 0.45,明显变形。修完之后又出现新问题,所有草一样大,像塑料草坪。根子在于我们用横向拉伸参数来做随机,而三维模型横向拉伸必然变形。现在的做法是删掉横向拉伸,全部改成等比,大小变化改用抖动系数来实现,抖动值由世界坐标哈希决定,不能用随机数,否则玩家每次重进地图草的大小都会变。草和芦苇的抖动范围给得最宽,是 0.45 到 1.90,石头 0.75 到 1.35,树 0.80 到 1.30。另外地标草原来放大到约一米,看着像小树,按真实草丛 0.3 到 0.5 米的尺寸收到 0.38 到 0.50。
草完全不显示
草一个像素都不渲染,但日志里实例计数是正常的,同一个渲染组里的树和石头都显示正常。原因是草和芦苇用了 GPU 实例化,而实例化对程序化生成的几何体不生效,树和石头是模型资源所以没事,草是运行时构造的顶点数据,被静默丢弃了。改法是程序化几何一律用普通静态模型逐节点渲染,只有模型资源才用实例化。同时补了两个连带问题:相机默认只渲染 mask 1,而植被挂在 mask 2,要在相机创建处把可见掩码设成全部;草的材质原本太暗,在深绿地面上几乎隐形,也提亮了。这类"计数正确但画面空白"的问题,先怀疑渲染路径,可以用换成模型资源的方式二分验证。
弹道距离修正
原来的想法是给每把枪配一张距离衰减表,但十把枪乘两种弹药再乘若干距离档,维护不动。现在改成用物理存速曲线,子弹速度随距离指数衰减,用每把枪自己的弹道系数和初速计算,不再需要一个全局的距离阈值。软头弹的有效弹道系数更低,因为弹头一命中就开始扩张、阻力增大,等效于用更小的系数掉速,这就是肉弹打不远的物理来源。有了存速之后,伤害、穿透掉级、软头扩张全部由它推导,不用再配表。伤害按动能算,穿透在存速跌破初速一定比例时掉一级,软头弹的肉伤加成也只在存速足够时生效。阈值用的是存速占初速的比例而不是绝对速度,这样像点二二这样的低速口径在近距离也能拿到加成,不会被一刀切掉。
伤口叠加
伤口要能跨枪累加,先打一枪小口径、再补一枪大口径,伤口应该叠加。如果设计成子弹改变伤口等级阈值,换枪时阈值跟着变,累加逻辑就崩了。所以把阈值和增量分给不同主体:阈值是猎物的属性,随猎物血量缩放,血越厚的猎物需要累计越多伤口量才升到同一等级;增量是子弹的属性,随动能缩放,口径越大一枪撕开的伤口越大。这样跨枪累加就自然成立了,子弹只负责往累计值里加,阈值始终是猎物的属性,伤口只会变重不会变轻。非致死伤口还要能愈合,停火二十五秒后开始恢复,按统一进度三十秒同时回血和退伤口,中途再中一枪则计时清零。中量是分界线,达到中量就是失血伤口,永不恢复。
评分
原来一枪致命给奖励,命中次数少也更容易拿高分,同一个事实被奖励了两次。现在命中次数倍率在一次命中时取中性值,只负责惩罚补枪;一枪的奖励全部由单独的表承担,按击杀方式分档,要害优先,高伤害秒杀反而给最低档,因为靠枪械威力碾压没有技术含量,不降档的话用最强的枪打最弱的猎物会成为最优解。另外未知或缺失的击杀方式取最低档,不能静默拿满分,数据缺失不应该变成漏洞。
倍镜分划
开镜后用分划瞄准猎物,子弹却打向别处。原因是分划被视差画离了屏幕中心,而弹道恒定在屏幕中心,玩家越转头分划偏得越多,高倍镜能偏到二十五像素。当时的注释还写着只移动分划、弹道不动,等于把错误设计固化进了注释。现在的规则是准星、分划、红点的唯一真值就是屏幕中心,任何偏离中心的表现都算问题;视差只能在抬枪过程中存在,举稳后必须精确归零。排查这类问题时先找到真值函数,让表现层向它对齐,不要反过来。













