找回密码
 立即注册
楼主: DomDomm

[笔记] 如果用unity制作一个高性能的类工厂游戏, 我应该选择用C++/rust替换底层的运算来加速吗?

[复制链接]
发表于 2021-5-26 07:47 | 显示全部楼层
语言带来的这点收益 远远不如ECS带来的收益。并且il2cpp就已经是C++了,所以你这是纯属瞎折腾。
不要过早优化
当然你要说,什么物理引擎什么的,可以用C++/rust做成单独的模块。
发表于 2021-5-26 07:56 | 显示全部楼层
不要面向幻觉编程,你的核心逻辑部分说不定根本就不是性能瓶颈,先把逻辑用最简单的方式写出来,如果慢就profile看是哪里慢,然后再考虑优化。
发表于 2021-5-26 08:04 | 显示全部楼层
确实有一些性能敏感的游戏会用C++/Rust编写核心库,然后以dll的方式导进Unity用,不过说实话这种方案操作起来过于麻烦,实际可操作性不强。
而且如其他回答所说,C#已经很快了,C++对于C#的性能提升远不足以解决架构和算法带来的性能瓶颈。
题主主要担心的应该还是工厂游戏里大量单位的行为和状态更新吧,DOTS确实是很好的选择,不过它还没有定型,写起来可能还是挺麻烦。在传统的架构下,通过减少骨骼动画、优化Update以及做好各方面的剔除工作(LOD和不可见物体不执行逻辑这样),就可以获得很大的性能提升了。
发表于 2021-5-26 08:06 | 显示全部楼层
换个语言基本没什么卵用,这种性能差距是体现在数量级上的。
要从架构上解决问题
一种选择是并行化,对于大规模相似简单GameObject的更新改成放在GPU上做,充分利用ComputeShader的并行计算能力,戴森球计划选择的就是这个方向。
如果更新逻辑比较复杂,非要在CPU上做,可以考虑ECS,它可以充分利用局部性原理,做成批处理,然后批处理就有向量化的可能,CPU都有向量指令集,应该可以帮不少忙。
发表于 2021-5-26 08:06 | 显示全部楼层
你需要先dop,多用pod,再考虑用simd 或 像 戴森球计划 做gpu加速。
发表于 2021-5-26 08:11 | 显示全部楼层
可以考虑参考戴森球作者文章里提到的优化方案。
发表于 2021-5-26 08:13 | 显示全部楼层
unity的所有关于对象的操作都是在一个主线程操作的,你要怎么实现多线程的管理GameObject呢?除非你去修改Unity引擎底层。
发表于 2021-5-26 08:21 | 显示全部楼层
这类游戏性能瓶颈根本不在游戏逻辑。。。。而是在渲染上。。。游戏逻辑你计算效率再快也没啥用,从图形学入手吧
发表于 2021-5-26 08:23 | 显示全部楼层
就做好一点就行,数据驱动
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-6-3 23:28 , Processed in 0.088364 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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