前述
这是一个系列的日志,如果您没有看过之前的日志,可能会不知道在讲什么,请看先看之前的日志后再来浏览:
病毒
在作病毒的功能要考虑周全,毕竟病毒的能力是整个模拟器的核心关键,刚刚开始准备以面向对象的方式处理,结果发现cocos3d的脚本对于继承的解析不如之前的版本方便,因此将各个功能给做了拆分,做成不同的组件方式,这样的话可以有效的分别控制,除了基本组件,还有传播组件、传染组件等,为了构建足够真实的情况,我还专门查了一下有关数据,定义了基础数值,复制间隔,感染距离,感染概率,病毒的活性,攻击力,存活时间等,这块的开发比较浪费时间,其中设计和修改模型的时间用的最长,虽然这只是一个简单的模拟,已经感觉数据关联很复杂了,为了不出bug,需要大量的时间的排查和思考逻辑,大约3个小时没有运行代码,全部都是在纸面上和脑子里
画面
在画面表现上,我用了小绿色的点来代表病毒,如果病毒入侵了人体,则小绿点显示在载体身上,在设定的每10分钟进行传染的效果下,很快就将程序卡爆了,主要是因为由于复制的病毒暴露在空间时候,存活时间设定为24小时,在仅仅设定了10个家庭模拟数据下,很快就生成了上万条数据,它占用了大量的资源,所以为了更好的模拟,我将病毒的存活时间设定为游戏中的6秒,就是现实中的1小时。
看了看结果,本想可能影响比较大,结果传播效率仍然惊人,这是人们只有30%的出行率的情况下效果,我试着提高到了100个家庭,传播速度仍然是非常的吓人,也很快把我的电脑卡成了幻灯片,连正常的录制都不能实现。
UI
为了更好的直观看到数据,得把UI给显示出来,显示多少人和多少病毒的数量来看看具体的情况如何,为了方便测试,我先降低了数量级,这样可以更好的测试,等一切就绪后我将再作整体UI,经过一番折腾,UI已经完成了,感觉仍然少一些东西,暂时先把主要的数据给展示出来以方便观看直接效果。
渲染
当我再次准备开始的时候,渲染效率感觉太慢了,原因还是因为光球的贴图,虽然我用了公告板技术来优化,但是节点的生成速度是在恐怖,我稍微的降低了一下病毒产出频率,并且加了一个病毒是否显示的开关,这样才稍微好点了。
AI优化
生病,一旦生病了外出的意愿就会降低,随着健康下降,将越来越降低出行欲望,达到一半的健康时候根本就不想出去。计算公式为:
出行欲望=(最大健康值 - 健康值)/ 最大健值 - 50%
我发现一个AI bug,对外访问的时候如果空间里没有人,那么也会被选择为目标,这个很显然并不合理,将其改进了一下,每次选择访问的时候都会选择和人接触,毕竟瞎溜达也得有目的。
参与和测试
如果您对这个项目有兴趣,源代码和测试地址在这里:
GitHub:
https://github.com/Nowpaper/VirusSimulator
测试地址:
https://nowpaper.github.io/VirusSimulator/
完成版本视频已经发布,请移步这里:https://www.bilibili.com/video/BV1WK4y147N1