你是否还在为分不清scav和pmc而苦恼?
还在犹豫是否开枪时就已经被一枪头眼?
出现在你眼前的ai,下一秒到底是会默默路过还是突然大叫“涡轮苏卡”?
这个mod可能就是你需要的。
出现在你视线中央的友好ai会被标注🟢,敌对ai会被标注❌。
灵感来源于这个mod:光的自动标识符 – SPT Mods Workshop (sp-tarkov.com)
原mod很有想法,在瞄准时会有一个“识别中”的显示,一段时间后友好ai会被标注【friendly】,敌对ai会被标注【hostility】。
但是这个识别时间就很难绷,本来偶遇的时候就分不清,你还在等识别的时候对面就两枪给你做掉了。
好在mod在github上是开源的,于是花了一天的时间做了彻底的代码重构。记录一下过程。
先来看一下源代码:
Ray ray = playerCamera.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2, 0));
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 150f, Bots))
{
GameObject hitObject = hit.collider.gameObject;
if (!IsBot(hitObject))……
可知这个mod的原理是从角色摄像机射出一条无形的射线,碰到障碍物(墙、树)就返回,碰到ai就读取ai的敌对态度。
但问题来了,使用过程中会发现,假如ai前面有一道栏杆挡住了射线,导致你即使看到它,mod也不会工作。
我第一步想到的是增加射线的粗细,用电线杆替换原来的细狗,发现行不通。哪怕你射出的是一条电线杆,一颗草也能给你挡住,导致识别不出来草后面的ai。
最终解决方法是把单条射线变成多条射线:
// 生成多条射线
for (int i = 0; i < rayCount; i++)
{
Vector2 randomCircle = Random.insideUnitCircle * raySpreadRadius;
Vector3 spreadOffset = playerCamera.transform.right * randomCircle.x +
playerCamera.transform.up * randomCircle.y;……
在你身前的一个圆圈范围内随机生成15条射线,只要有一条射线命中ai,立马返回。
这下哪怕ai只有一条腿露在外面,也能被探测到。
第二步,把原来挡了一小块屏幕的【friendly】和【hostility】换成简单易懂的“O”和“X”。
第三步,去除原来繁琐的识别过程(和感知相关,很长很麻烦的公式,距离太远还有延时惩罚),现在只要你视角中央对准了ai就会立刻识别,视角移开就立刻消失。
第四步,去除原来的识别范围,从15米提升到200米。
第五步,性能优化,每5帧运行一次,减少计算量(虽然原mod占用的性能就已经很少了)。
第六步,标识显示位置调整到准星偏下一点,以防阻挡准星。
在3.10.5上测试成功,3.11没试过,按理说也应该可行。玩3.11的不妨在评论区留下测试结果。
具体索敌距离不太清楚,在工厂里对最远端的ai也能正常识别(前提是视野中能看到部分身体),有兴趣的可以试一下并反馈给我。
使用方法:和其他mod一样……
不知怎么的搞到付费下载了,晕死。
泰酷辣!
我个人喜欢清理所有ai,我是用不上这个了
3.11.3实测可用
多谢大佬分享
66666