Hi there,
just wanted to share a small task i did a few weeks ago. Never made a 3rd Person controller before so i thought about trying pmndrs/ecctrl and it works really well out of the box. I used pmndrs/react-three-rapier for physics in the scene. Let me know what you think 
3rd Person Controller Task 
5 Likes
Kind of late, but I’d like to share my experience using ECCTRL.
It is very nice and just works, until it doesn’t. I’ve had tons of issues by trying to get a reference to the “player”. Went through the docs, asked around on github, but it was very inconsistent.
One feature I really love, though, is camera collision, which you can enable on a mesh-by-mesh basis. Really neat. Also the integration with animations is pretty effortless.
However I updated React and the project broke beyond repair.
I had a similar experience with ECCTRL. It’s really nice for getting a third person controller running quickly, especially with Rapier, but once you start needing more control over the player or the physics body it can get a bit tricky.
The abstraction is convenient at first, but sometimes it hides too much of the underlying Rapier body and that makes debugging or extending behavior harder. Things like directly accessing the rigid body, modifying movement logic, or integrating custom systems can become inconsistent depending on how the component lifecycle behaves in React.
The camera collision feature is definitely one of the best parts though. It saves a lot of time compared to implementing your own raycast or spherecast camera system.
In cases where a project starts to grow, I’ve found that some people eventually move toward building a small custom controller on top of react-three-rapier instead of relying fully on ECCTRL. That way you keep the physics integration but have full control over movement, camera behavior, and animation logic.
https://theneoverse.web.app#threeviewer&&redrock-ridge
Also if anyone wants to see another example of a third person setup in the browser, here’s a small demo scene:
Still a great tool for prototypes or smaller projects though.