CharacterBody3D vs RB3D for multiplayer performance?

Godot Version

Godot 4.6 Stable Win64x

Question

Hey all, I’m making a “Clash Royale”-style game, and I’m at the point where I needed to figure out how to have multiple matches played on a single headless instance of Godot. I created a test scenario, and it turns out it could only handle about 30-40 troops before the performance started to tank…

TLDR; Would changing my Rigidbody3d Troops into Characterbody3d improve performance, and by how much? (My headless server has to handle multiple matches, averaging 100 path-finding troops between all of them. I need this because hosting servers will be really expensive and I don’t want to do p2p/default GD multiplayer because cheating might occur.)

More Info:

  • My Troops are being moved every physics_process via their NavigationAgent3D

  • My RigidBody3D troops have their axis locked, 0 gravity, 0 friction, and they can sleep. Dampening is also set to replace.

  • I am using Jolt Physics, and the game’s Physics Tick Rate is set to 6, and other physics options are likely also lowered.

  • I am using Nakama, it creates a Headless Godot Server for the game logic once two players are matched, because I do not understand how I can have the game be simulated/server authoritative if Nakama’s modules do not support physics. I am so close to finishing everything back-end wise…If you are more knowledgeable on this PLEASE let me know if I can do this a better way!!!

characterbody3d doesn’t automatically have physics applied to it, however it grants greater control with this style of game rather than rigid bodies, as rigid bodies cannot be moved manually in the same manner as character bodies, so id honestly just go ahead with character bodies, its wayyyy simpler