I don’t recommend removing the movement component, as it handles a lot of functionality that you would otherwise have to create yourself, and I don’t think it is all that related to the problems you are experiencing with movement in general. You also don’t really need to extend the playercontroller (at least not for movement) as long as you are using a character class derivative for your pawn.
Anyways, the functionality for the character movement can be found within your character class, which should have been created automatically if you started a project based on a template (character). If you didn’t start a template, I highly recommend that you do. Once you get used to the UE4 environment, you can always dive into a blank C++ project. For templates, the movement related functionality can be found in the MoveRight and MoveUp functions. The functionality used for movement is likely something along the line of AddMovementInput(Direction vector, move value); what this function does is adding to the player acceleration, based in the direction value.
As for a quick rundown of the Unreal structure:
-You don’t really need to use a player controller. The character class takes care of pretty much everything. Playercontroller would only be kinda necessary for HUD related functionality. That’s the only time I have found a use for it anyway.
-Movement component takes care of things like player velocity and has a plethora of built in functionality like jumping, crouching and whatnot. If you select the movement component in the blueprint version of your character, you can change a large amount of variable regarding movement, like jump height, max movement speed, acceleration, the gravity of your jumps, and so on.
-Input component takes care of your input. You can set up input in the project settings (which can be found in the editor) or the .ini file. Not sure of the exact name of the latter, since I generally just use the project settings. The input functions in your c++ files take the same name as the names you entered in the input settings. For default projects, a few inputs have already been added, those being (at least) MoveRight, MoveUp and Jump. There are two kinds of input; axis and action. Axis gives you a constant value between -1 and 1 (used for, for instance, analog stick input). Action gives you singular inputs, but enable you to bind functions to both the Onpressed and Onreleased state of the buttons.
-There are a variety of ways to make the player move.
-
If you wish to use the velocity, using the aforementioned “AddInput” function will be your best bet. Just calculate your direction vector and add in your value (which is generally just the value you get from the axis input function).
-
If you wish to directly set the location directly, the function SetActorLocation is your best bet. This one just takes a vector of the new location.
-
A thing to keep in mind while moving your character around is his Movement Mode (a variable found within the Movement component). By default a character cannot just float up in the sky, meaning you can set the Z-value as much as you want, but if there’s nothing but air there, the character simply won’t move up (physics). If you wish to move your character in any direction you want, you must first set the movement mode to PHYS_Flying, which allows the character to move anywhere (but is extremely floaty in terms of movement).
It’s not the best rundown, but I hope this helps a bit towards getting your character to move.