Wall Movement w/ Networked Multiplayer (dynamic)

tl;dr Think RocketLeague where you can drive on the walls except you’re “running” on the walls (ie magnetic boots) and the areas you can run on change dynamically at runtime and I need to replicate this over online multiplayer.

At this point I’m almost entirely certain that I’ve got to manually script all of my movement including jumping, falling, moving, ect. but the question I’m asking is, on a macro level, what’s the best way to go about this for performance / ease of use? I would like to avoid rewriting as much as possible as the built in physics are completely fine imo outside of this requirement. Should I ditch CharacterMovement entirely and go for Pawns as the player character? Should I use some code change that allows you to set the gravity direction for the movement component? What’s the consensus?

I’ve attempted several things on the “code my own movement” in a character bp but the Character Movement Component has been fighting me pretty much the whole way. After some additional research I believe I know which features to disable in order to stop things like making my character always 90 degrees even when I set their rotation toward the surface of whatever they’re supposed to be walking on - but I estimate that solving this problem will likely take me a few days of work to get it to a decent state. As this is a core mechanic of the game it’s going to need to be polished in order to feel right, and that means that tackling the problem from the right angle will be imperative to saving time.

Edit: Realized the scope of what I’m aiming to do. I’ve decided to move the mechanic to a “nice to have” and will consider adding it once it’s a more feasible opportunity. It alters the game a bit but with my current estimated polish time it is quite likely that I’d actually be spending an entire month on this feature and may end up having to scrap it due to bugs and clunkiness. Simply put, the vision I had isn’t the only journey to the game I want to make and seems to be far too much work than I can possibly invest.

I can’t give you a solution, because as you pointed out, the result is hacky at best, when we use the standard character movement component. The problem is that the engine has a hardcoded Z-axis. At first I thought I could solve it by getting the hit normal of a surface and align my character. Eventually I stumbled over that my logic was flawed. I couldn’t get it to work, because the gizmo of the character (XYZ direction) doesn’t change for the character, when I rotate it towards the hit surface. It would only transform X and Y, but Z would still remain on the hardcoded Z-axis. Set actor rotation, set actor location and all these nodes appearently also use the hardcoded Z-axis in some way. Add local rotation and add local offset should work, but I didn’t get it to work with them either.

Point is, the standard character movement component is riddled with hardcoded Z-axis stuff.

I’ve gone for a different solution for the project I am working on, but it can’t help your situation.
Maybe you can use the custom gravity plugin. Just be aware that it doesn’t work well with objects, which are moving. But in your case it might work as long as you don’t have a gravity objects moving.

Download and try the example map out, before you integrate it into your project, because it is a little bit tricky, when you want to have a custom project with it as a single plugin:

You could also go for your own movement component, but that is much more work. Keep also in mind that if you have AI in your game, you will probably end up having to create your own version of AI, because the navigation mesh can only be generated on a horizontal plane, not sideways or upside down.

Hope I could help you somewhat.