Cool project! The advice I’m about to give might not make your life easier in the short term, so please take that into account when considering it; but for a use case like this, I wouldn’t recommend using
ArcRotateCamera. Instead, what I would recommend doing is using a
UniversalCamera, not attaching the default controls, then creating the control scheme yourself.
The reasoning is that, while camera controls in general aren’t that hard to do, getting the “feel” right for a particular scenario is largely a matter of tweaking and fiddling. If the “feel” isn’t right out-of-the-box from a provided camera mechanism, the camera’s built-in behaviors are likely to get in the way of the fiddling more than they will help it, so the relatively small investment to create a bespoke mechanism will pay big dividends in the longer term because (1) you’ll understand completely how it operates and (2) you’ll be able to change it very freely to suit your needs.
For your specific case, then, I’d recommend starting with the following approach:
- Create a
TransformNode hierarchy where the camera (which is distant from the character and looking in) is parented to a
TransformNode which is in the character, which
TransformNode is itself parented (possibly indirectly) to the character. This will allow you to quickly recover some aspects of the
ArcRotateCamera functionality (the parenting to the on-character
TransformNode will act as a lever) without being beholding to the
ArcRotateCamera's specific set of built-in behaviors.
- Decide how you want the camera and the character to be related. If you truly want the camera to be always behind the character, then just rotate the character, not the camera, and disallow the camera’s parent
TransformNode from rotating in Y. This will cause the camera to automatically “move” to stay rotationally locked to the character without you having to do any additional special handling.
- As you want to change the feel, having complete control over the camera’s behavior may matter more or less depending on the decisions you make. 3rd person character cameras often have complex relationships with the character (don’t turn the character if the camera turns unless the character is moving, and don’t turn the camera if the character starts moving until a few seconds have passed unless the player is already directing the camera to face in a different direction, allow the camera to be slightly “left behind” as the character accelerates but catch up later to make things feel springy, etc.), and the easiest way to effect those kinds of behaviors precisely will be to maintain direct control on the relationship between the camera and the character.
Again, the value of this depends on how far you want to take it; so if
ArcFollowCamera suit your needs out of the box, those are probably great choices. However, if you start needing to customize the behavior of the camera to get the effect you’re looking for, cameras with extensive built-in behaviors may start sort of fighting you on that effort, so it could be worthwhile (and not too difficult) to consider tackling it from the ground up.
Hope this helps, and best of luck!