UE4 – 3D Third Person Character Movement – Initial Tests
My current focus is experimenting with 3D Third Person movement control in Unreal Engine 4, in order to work towards experimenting with a prototype (and gauge whether this is possible for me to complete). The UE4 ‘Flying’ starter project was a good place to start and I have played around with this project, viewed other people’s work based off it and sought out as many tutorials as I could find on the subject.
Although the start project focuses on a flying spaceship pawn, this is actually still relevant to my prototype idea – which is an attempt to create an underwater swimming controller (see Ecco the Dolphin for reference). If you imagine that the empty space around the flying ship is in fact water, the movement is almost identical.
I have been looking at games that use 6DoF (Six Degrees of Freedom: forward/back, up/down, left/right, pitch, yaw, roll) controllers to gain a better understanding of how this movement can work, how I want my player to move and whether this will be suitable or not. I’ve been looking at games such as Descent, Retrovirus, Shattered Horizon, etc. These games are mostly space-themed first person shooters, that involve zero gravity or otherwise flying upside down.
I feel like this method of movement is very close to how I would like my player to move, but possibly just without the full Roll (so, no swimming upside down). However, this is exactly what a prototype will allow me to figure out. This type of movement works best with tunnel style levels, which is also what I have had in mind for my prototype – or at least areas of it.
I found an accompanying tutorial for this type of movement but unfortunately couldn’t manage to make it fully functional due to it being outdated for a much earlier build of the engine and also my limited knowledge of Blueprint. Despite this, following the tutorial still taught me much more about using UE4 and Blueprint and I did manage to create a partially working controller.
An initial result of mine after following Tom’s tutorial – the basic ship movement is functional (WASD), but the mouse input wouldn’t work. Amongst a forum post, I found an updated version of the graphs he used and tried those also. The mouse input was responsive but was juddering and wouldn’t allow you to look around 360 degrees, feeling very restricted. After troubleshooting, I decided to continue researching and experimenting from alternative reading and tutorials
After moving on from this initial test, I found this “Space Shooter Starter Pack” from a user on the Unreal forums. The post is also fairly old and a little outdated but I did manage to get it to work in 4.9 after a little tweaking, allowing me to play around with the controller and also delve into it’s Blueprint to see exactly how it works. This project is a much improved version of the starter flying controller bundled with the engine, which I have also been playing with. It isn’t perfect for my needs but is definitely a valuable resource to improve my UE4 knowledge and also get me started on my own creation. Below I have included a set of gifs I recorded while testing out the project files myself.
I have broken down the controls to look at them individually, and see more closely exactly how they function. This will help me get an understanding of details which I would like to use myself and areas I could focus on for improvement. It also improves my understanding of the technical side of movement and how various details can come together to produce a controller which is much more fluid and satisfying to use.
- Using W, A, S and D to move forwards, backwards, left and right (or a combination)
- Using Spacebar to levitate/rise upwards and Ctrl to sink down
- Using the mouse to move the camera/look around – which also updates the direction the ship is facing and therefore traveling
- Using Shift to boost forwards and temporarily increase speed
[It is also worth noting that the UFO can fire projectiles and use an abduction beam which are not shown above, as I am mostly focusing on player movement for now and will move onto these kinds of mechanics later]
Overall, the controls feel fluid and the functionality is very close to what I would like to end up with in my own project. I found that using Shift/Ctrl to rise and sink was a little cumbersome on the keyboard but I can imagine this being much nicer on a game pad – however, I would like to create a control system that works seamlessly between input devices – not tailored to just one. I also need to keep in mind that the ideal platform of my concept is touchscreen tablets such as the iPad, so the control system would be much simpler (as detailed in my earlier project’s Pitch Doc).
Understandably, the Blueprints are much more complex than what I have been dealing with so far, but the author has helpfully commented and arranged them in a logical way, so I can begin to pick them apart. This also means that if I would like to know how to create—for example—the speed boost, there is a neatly commented section that I can view to see exactly how this works and begin to pick it apart. There are various more complicated techniques used to improve the overall fluidity of the control – such as changing the FOV (field of view) of the camera dependent on speed and also using a spring arm to re-position the camera more effectively as the player moves.
I think a wise next step for me would be to begin trying to recreate this controller in a blank project using these project files as reference, but minus the extra details such as the more complex animations and 3D model (so I can focus purely on movement). I would like to create and use a simplified, prototype Sea Dragon model (not rigged) to help me visualise it with my own concept. This will allow me to strip the Blueprints down to the essentials and worry about polish such as animation later, once the functionality is where I would like it to be. I will also be able to build a more thorough understanding of each element. I think it would be logical to take these project files one section at a time and focus on remaking it myself. Hopefully this will not prove too problematic as a result of my limited Blueprint knowledge. If I find this too ambitious or challenging, I can scale back my goals and take a step backwards to build a stronger foundation of UE4 knowledge first.
- Create a very simple Sea Dragon prototype model and import into UE4 (can just be primitive shapes at this stage)
- Attempt to recreate the sample controller, step-by-step, in a new project using my own model
- Implement a grey-boxed environment for testing (comparing movement within tunnels and open spaces, etc)