大佬们,RigidBody3D开销低于CharacterBody3D正常吗?
godot吧
全部回复
仅看楼主
level 4
测试版本:godot4.5-stable,实体数量1000,每秒物理帧25,都用GDScript脚本
测试内容:
1.实体会每2s~5s标记方圆16m内一处地点,并且朝地点移动,
2.会尝试监控正面(Area3D内)的一个实体,每帧发出射线检测
3.会把接触到的实体推开,CharacterBody3D是move_and_slide后检测碰的实体,RigidBody3D是监听接触实体信号
默认物理引擎和jolt都是RigidBody3D开销低于CharacterBody3D
CharacterBody3D会每帧调用move_and_slide,0移速也调用
RigidBody3D锁定旋转,每帧调用apply_central_impulse加速,也不会进入休眠
理论上来说RigidBody3D的开销不应该比CharacterBody3D更高吗?(豆包是这么跟我说的)难道CharacterBody3D被是GDScript的运行效率拖累了?是不是理论上让CharacterBody3D加个自动调用移动函数就会有所好转?orz
品红的是CharacterBody3D,蓝的是RigidBody3D,黄的是Area3D
2025年12月16日 12点12分 1
level 4
这个是我测试的项目orz
通过百度网盘分享的文件:性能测试.zip
链接:网盘链接
2025年12月16日 13点12分 2
level 7
CharacterBody2D是特殊的,move_and_silide()内部调用的move_and_collide()会主动碰撞,内部多次调用物理引擎的solve。而RigidBody2D刚体碰撞只会调用solve一次。可惜我不了解历史,不知道为啥给CharacterBody2D改了这么多东西。
2025年12月17日 03点12分 3
level 4
大佬们,我也试了一下2d场景,Rigidbody2D开销比CharacterBody2D稍微高一点点,差的不是很多,然后……CharacterBody2D自己用move_and_collide和move_and_slide开销居然差不多,CharacterBody3D这两个移动函数的开销也是差不多slide会多一点但是不明显,啥情况……难道是GDScript发力了?
2025年12月17日 05点12分 4
slide和collide是差不多的,slide是在collide的基础上,实现了先碰撞,再沿着碰撞方向滑动的逻辑。gdscript是在cpp上做了一层封装,实际上gdscript也算是先生成二进制再执行,所以跟gdscript关系不大。
2025年12月17日 08点12分
level 9
按照我的理解,我觉得应该是反着的, 刚体需要更多的特性,应该是rigid大于characte开销才对
2025年12月18日 16点12分 5
1