Building a Player Character from Scratch?

The core idea is to check your inputs on tick and make SetActorLocation() based on it.

Yes–that’s exactly what I was missing! I had been using AddMovementInput(), completely forgetting that SetActorLocation() was a function available to use. Replacing the logic using the Movement Component function did the trick, and the Pawn is working as expected. Thank you very much for that suggestion!

Additionally, you cautioned that the CharacterMovementComponent came with out-of-the-box networking support, while custom Pawn objects do not. This project is intended specifically for local multiplayer, with online multiplayer likely being way out of scope. In the event that online multiplayer is never a concern with this project, are there any other pitfalls I should be wary of when implementing two custom player Pawns, specifically for local multiplayer?

Cheers, my friend, you’ve saved me a heck of a headache.