Nora Project BreakDown
Project Goals:
-
Produce a game in order to learn about Unreal Engine 5 and its features.
-
Build game mechanics so that I could start learning how to use blueprints in Unreal Engine.
-
Create a locomotion system in Unreal engine that makes moving around fun.
-
Design one or two effects on the side since I was a little curious about learning Niagara.
This is my first Unreal Engine Project and I used Martin Chang’s CatBot Locomotion project as inspiration.
The primary elements of my project are composed of:
-
Base Ground Locomotion with directional leans
-
Air Locomotion System (Double Jump, Air Dash, Etc)
-
A Wall Running System consisted of animations based on the character’s side of the wall.
-
Rail Grind system
-
“Launch Port” which launches the character in a certain direction at high speed.
-
Creating some effects to accompany the respective animation systems.
Character rig is by Kiel Figgins:https://www.turbosquid.com/FullPreview/1557652?referral=kielfiggins
Wall Run Plugin from Hammerhead: https://www.unrealengine.com/marketplace/en-US/product/dynamic-wall-run?sessionInvalidated=true
Rail Grind Component Plugin from Aaron Cant: https://www.aaroncant.com/copy-of-boltgame
Full Video:
Full Video
Nora Unreal Project
Planning
I started by writing a document with the scope of my project and then created the animations in Maya according to that scope. I would track my tasks weekly through Google Calendar and adjust things in accordance with changes that needed to be made.
This was the most important stage of the process and looking back on it now, it was the one I neglected the most, primarily when it comes to creating the system in Engine. Usually, game animators tell you to make the animations then throw them in the engine immediately to figure things out and I didn’t listen because I was scared of the Engine.You can not run from the Engine. I made all of the animations beforehand and then completely winged creating the system in Unreal. Don't do this, I learned the hard way and could have saved so much time if I just listened. Looking back I don’t even know how I managed to accomplish this hahaha, but yeah please plan more carefully as you need a solid foundation for a decent project.
Ground/Air Locomotion
The base locomotion system was the hardest for me to implement as this was my first experience with Unreal Engine at the time. However, after watching a couple tutorials I began to slowly understand how things work. I created different running animations based on direction and implemented them into a blendspace which would blend them based on rotation. I did this for my base running state as well as a sprinting state that I had created in Engine. Anim Notifies helped a lot with blending the transitions between states.
Animation Blendspace for Base Ground Locomotion System
Using animation layers in Maya as well as additives in Unreal Engine saves helped save me a lot of time when creating this system.
For the character’s actions in air throughout the course of the project I tried a variety of things. I wanted to see how I could get the character’s animations to feel cool and thought of making the jump animations root based. That came with its own set of problems that I’m not advanced enough to address at the time, so instead I figured if I had a complex animation I would just create it regularly and then export it in place.
Creating the code for both of these systems was very hard for me since this is my first time using blueprints so I had to look up a variety of tutorials to create both of these systems in the Engine. So for both base locomotion systems I created code for :
-
Walking/Running
-
Ground Dashing/Sprinting
-
Jumping/Double Jumping
-
Air Dashing
Ground/Air Locomotion
Code for Air Dash Mechanic
I had a lot of problems creating this system. Initially I wanted to script this myself and tried to do so for weeks. However, since I am still a beginner that obviously was not going to work as I still have very little experience with the Engine. So I ended up purchasing a plugin with the code in Unreal Engine.
Setting this up was fairly simple as everything was provided. However the main obstacle I encountered was getting my animations to play. After reading through the guide and adjusting things through the animation blueprint I was able to get everything to play. After that, I imported the animations and adjusted them accordingly so that they interacted properly with the walls.
Through this I was able to learn how to Link Animation Graphs together and this knowledge helped greatly with the next system.
Linked Animation Graph
Rail Grind System
I had more trouble with this one than I did the last. I was able to get a plugin but a lot of it was broken and I had to redo a lot of things in order just to get the character to attach to the rail. A lot of these issues had to do with the way certain things were being referenced, but even after going back and fixing those things some of the functions still didn’t work. Since I didn’t have the knowledge, I adjusted my project to exclude those mechanics.
This was supposed to be an animation that would play when you transfer between rails, but since I couldn't get the code to work properly I had to create different animations to accommodate that. This animation was used to jump over obstacles instead.
This affected me when trying to create the animation blueprints for this system as I had trouble accessing certain components, so my animations wouldn’t play. However, after I solved it I was able to access all the information needed by sending a message in the animation blueprint that helps call the information of the component. After that, creating the animation blueprint and linking them to my main BP was fairly simple, as I had learned some things from the last segment.
This function sends a message to the Rail Grind Component to check if its valid. If its valid I use the variables to get the information needed for my animations to play.
Launch Port System
The launch port wasn’t as bad as the other two. It’s essentially just a launch pad that boosts the character through the air. I found a free pipe asset online and followed a tutorial in order to create the texture that is seen on the pipe.
Material made for the pipe texture, created by following a youtube tutorial.
When you get near the pipe there is a collider box that triggers an animation montage I created and it’s similar for when you exit the pipe.
Blueprint Code that sets a variable OnComponent Overlap. This variable is used for a couple of custom events in my main blueprint. After the animation is played, everything goes back to normal.
As for the diving animation, in the animation blueprint when the character is falling I set a timer that triggers a custom event after a certain amount of time. After that it sets a variable which allows the character to enter the diving mode.
For the roll landing, I created an event where if the character falls at a certain velocity, an animation montage is played. Reddit and the Unreal Engine community space helped me a lot when trying to figure out how to apply this logic into my blueprints.
Event where I use a Timer to set the variable for the freefall event. (Could be optimized better but it got the job done)
Effects
Towards the end of the project I wanted to create effects for a couple of things. I achieved these effects through both following tutorials and through free plugins I received on Unreal Engine Marketplace.
For the Ghost Trails that play when the character is dashing I created a separate blueprint that had a poseable mesh component. I then created a material instance that makes the mesh transparent.
In the blueprint above I used a node to generate the ghost trail as a random color. After that in my main blueprint, I created an event that spawns the actor at the character’s world position. In my animation blueprint, I used AnimNotifies to call that event. This was also used for the animation when the character exits the pipe (See above).
I have two effects that I use when Nora enters the pipe, an effect showing Nora dissolving and an effect showing a ball forming as Nora dissolves.
For the ball, I followed a tutorial that starts with me creating a material using a Noise map. The panner node on the Noise map is what makes it look like it’s moving. After I edited the material instance to my liking I went into Niagara and created a particle system. I used the mesh renderer in order to get the shape and texture that I wanted.
Niagara System for the Orb FX. Created by following a tutorial on CGHOW.
To implement this, I set the emitter property to Local Space and created a User parameter to help me access the effect’s opacity in my character blueprint. Then, when I want it to spawn I create a Timeline event that helps set the Niagara variable. After a while this condition becomes false and that timeline reverses.
The Dissolve effect when Nora goes near the launch port is similar. However instead of using Niagara, I got a dissolve material function from the Unreal marketplace and I used that function on my main character texture. I then made that into a material instance and created an event that sets the Scalar Parameter when Nora hits a collision box. (See blueprint above)
Project Reflection/Conclusion
Overall, I would say that I met my goals in creating a system that helped me in order to understand some of the different features in Unreal Engine. However, looking back, if I were to start this project I would do a lot of things differently to make sure things go more smoothly.
First of all, I would cut the scope of my project greatly. This project was super ambitious and at times I suffered because of that. Sometimes I would be stuck on things for days because I lacked the technical ability to properly execute my ideas.
Additionally, as the project went on, I noticed not only did my technical skills slightly improve, but my animation skills did as well. As a result of that, there are a lot of things animation wise that I wanted to go back and fix the deeper I went into my project. However, as I wanted to get things done at a certain time, I decided that I would have to move on and was only able to make adjustments to some animations.
In total this project took me way too long, around 4 and a half months to complete. I made approximately 40 animations overall not including the effects and textures created towards the end of the project.
Would I recommend doing a project like this?
Hell yeah!
Not the way that I did though. I don’t even know how I got this far to be real about it.
If you do start off small and work your way up you should be able to get something cool :D ! Oh and Shoutout my mentor Eric Drobile! He helped me improve the quality of my animations a lot when I first started my project.
If you have any questions feel free to contact me, thanks for your time!