Reader small image

You're reading from  Game Development Projects with Unreal Engine

Product typeBook
Published inNov 2020
Reading LevelBeginner
PublisherPackt
ISBN-139781800209220
Edition1st Edition
Languages
Tools
Right arrow
Authors (4):
Hammad Fozi
Hammad Fozi
author image
Hammad Fozi

Hammad Fozi comes from a gaming background and has been extensively working on Unreal Engine since 2017. He has been part of some very successful AAA projects such as Virtua FanCave (and Metaverse), Unnamed AAA Sci-Fi DJ Experience, Heroes and Generals, and Creed: Rise to Glory VR. Hammad has worked with teams who have had experience working at Ubisoft, Warner Bros. Games, 2K Games, and more! He has successfully helped teams consisting of 10–30 people to scale to 150+ in size over his very short yet impressive career. Hammad currently works as a senior C++ game developer and has extensive experience in working with VR and augmented reality, PC/PS5/Xbox/Android/iOS/macOS game development, and Web3/Metaverse/NFT systems (within Unreal Engine).
Read more about Hammad Fozi

Gonçalo Marques
Gonçalo Marques
author image
Gonçalo Marques

Gonçalo Marques has been an active gamer since the age of 6. He has been using Unreal Engine since 2016 and has done freelance and consulting work using the engine. Gonçalo also released a free and open source plugin called UI Navigation, which has garnered an extremely positive reception with over 100,000 downloads and is still receiving frequent updates and fixes. Thanks to the development of this plugin, he became an Epic MegaGrant recipient. He is now working at Funcom ZPX, a game studio in Lisbon that has contributed to games such as Conan Exiles, Mutant Year Zero, and Moons of Madness. Gonçalo is currently working on a new Funcom game in the Dune universe.
Read more about Gonçalo Marques

David Pereira
David Pereira
author image
David Pereira

David Pereira started making games in 1998 when he learned how to use Clickteam's The Games Factory. He graduated in computer science from FCT-UNL, where he learned about C++, OpenGL, and DirectX, which allowed him to create more complex games. After working in IT consulting for a few years, he joined Miniclip in Portugal where he worked on popular mobile games such as 8 Ball Pool, Gravity Guy 1 and Gravity Guy 2, Extreme Skater, iStunt2, Hambo, and many others. Since then, he has been the lead developer for MPC in the John Lewis Christmas VR Experience, worked on an earlier version of Mortal Shell, and did volunteer work teaching people with Asperger's how to make games with Unreal Engine 4. Today, he's working on his own game, a soon-to-be-announced first-person action RPG.
Read more about David Pereira

Devin Sherry
Devin Sherry
author image
Devin Sherry

Devin Sherry is originally from Levittown, NY, located on Long Island. He studied the topics of Game Development and Game Design at the University of Advancing Technology where he had earned his Bachelor of Arts in Game Design in 2012. During his time in college, Devin worked as a game and level designer with a group of students called Autonomous Games on a real-time strategy styled, third-person shooter called The Afflicted using Unreal Engine 3/UDK where it was presented at GDC in 2013 at the GDC Play Showcase. Today, Devin works as an independent game developer located in Tempe, Arizona, where he works on personal and contracted projects. His achievements include the title Radial Impact, which can be found in the Community Contributions section of the Learn Tab of Unreal Engine 4's Launcher, and his work on his YouTube Channel, Devin Level Design, where he educates viewers on game development within Unreal Engine 3, UDK, and Unreal Engine 4.
Read more about Devin Sherry

View More author details
Right arrow

Animations

Animation is essential for adding life and richness to a game. Superb animations are one of the major factors that differentiate average games from the good and the great from the best. Visual fidelity is what keeps gamers excited and immersed in games, and hence animations are a core part of all games and experiences created in Unreal Engine.

Note

This chapter seeks to cover animation basics. A more in-depth approach to animation will be taken in Chapter 13, Blend Spaces 1D, Key Bindings, and State Machines.

Animation Blueprints

An Animation Blueprint is a specific kind of blueprint that allows you to control the animation of a Skeletal Mesh. It provides users with a graph specifically for animation-related tasks. Here, you can define the logic for computing the poses of a skeleton.

Note

A Skeletal Mesh is a skeleton-based mesh that has bones, all of which come together to give form to the mesh, whereas a Static Mesh (as the name suggests) is an un-animatable mesh. Skeletal Meshes are normally used for characters and life-like objects (for example, a player hero), whereas Static Meshes are used for basic or lifeless objects (for example, a wall).

Animation Blueprints provide two kinds of graphs: EventGraph and AnimGraph.

Event Graph

The Event Graph within an Animation Blueprint provides setup events related to animations, as we learned in Chapter 1, Unreal Engine Introduction, that can be used for variable manipulation and logic. Event graphs are mostly used within Animation Blueprints to update Blend Space values, which, in turn, drive the animations within AnimGraph. The most common events that are used here are as follows:

  • Blueprint Initialize Animation: Used to initialize the animation.
  • Blueprint Update Animation: This event is executed every frame, giving developers the ability to perform calculations and update its values as required:
Figure 2.22: Animation Event Graph

Figure 2.22: Animation Event Graph

In the preceding screenshot, you can see the default Event Graph. There are Event Blueprint Update Animation and Try Get Pawn Owner nodes here. You created new nodes and appended them to a graph to complete some meaningful tasks in Exercise 2.04, Setting Up the Game Mode, Player Controller, and Pawn.

The Anim Graph

The Anim Graph is dedicated to and responsible for playing animations and outputting the final pose of the skeleton, on a per-frame basis. It provides developers with special nodes to execute different logic. For example, the Blend node takes in multiple inputs and is used to decide which input is currently being used in the execution. This decision is usually dependent on some external input (such as an alpha value).

The Anim Graph works by evaluating nodes by following the flow of execution between the exec pins on the nodes being used.

In the following screenshot, you can see a single Output Pose node on the graph. This is the final pose output of the animation that will be visible on the relevant Skeletal Mesh within the game. We will be using this in Exercise 2.05, Creating a Mannequin Animation:

Figure 2.23: Animation AnimGraph

Figure 2.23: Animation AnimGraph

State Machines

You have already learned how animation nodes and logic can be set up, but one essential component is missing. Who decides when a particular animation or piece of logic should play or execute? This is where State Machines come into the picture. For example, a player may need to shift from crouching to a standing pose, so the animation needs to be updated. The code will call the Animation Blueprint, access the State Machine, and let it know that the state of the animation needs to be changed, resulting in a smooth animation transition.

A State Machine consists of states and rules that can be thought of as depicting the state of an animation. A State Machine can always be in one state at a particular time. A transition from one state to another is carried out when certain conditions (which are defined by rules) are met.

Transition Rules

Each Transition Rule contains a Boolean node by the name of Result. If the Boolean is true, the transition can occur and vice versa:

Figure 2.24: Transition Rules

Figure 2.24: Transition Rules

Blend Spaces

When you're provided with a bunch of animations, you can create a State Machine and run those animations. However, a problem is presented when you need to transition from one animation to another. If you simply switch the animation, it will glitch since the new animation's starting pose might be different from the old animation's ending pose.

Blend Spaces are special assets used to interpolate between different animations based on their alpha values. This, in turn, removes the glitch issue and interpolates between the two animations, causing a swift and smooth change in animation.

Blend Spaces are created either in one dimension, known as a Blend Space 1D, or two dimensions, known as a Blend Space. These blend any number of animations based on one or two input(s), respectively.

Exercise 2.05: Creating a Mannequin Animation

Now that you've gone through most of the concepts related to animations, we'll be diving in hands-on by adding some animation logic to the default mannequin. We'll be creating a Blend Space 1D, a State Machine, and Animation logic.

Our goal here is to create a running animation of our characters and thus gain insight into how animations work, as well as the way they are bound to the actual character in a 3D world.

The following steps will help you complete this exercise:

  1. Download and extract all the contents of the Chapter02 -> Exercise2.05 -> ExerciseFiles directory, which can be found on GitHub. You can extract this to any directory you're comfortable with using on your machine.

    Note

    The ExerciseFiles directory can be found on GitHub at the following link: https://packt.live/32tIFGJ.

  2. Double-click the CharAnim.uproject file to start the project.
  3. Press Play. Use the keyboard's W, A, S, D keys to move and the Spacebar to jump. Notice that, currently, there are no animations on the mannequin.
  4. In the Content folder, browse to Content -> Mannequin -> Animations.
  5. Right-click the Content folder, and from the Animation section, select Blend Space 1D.
  6. Select UE4_Mannequin_Skeleton.
  7. Rename the newly created file to BS_IdleRun.
  8. Double-click BS_IdleRun to open it.
  9. Under the Asset Details tab, inside the Axis Settings section, expand the Horizontal Axis section and set Name to Speed and Maximum Axis Value to 375.0:
    Figure 2.25: Blend Space 1D Axis Settings

    Figure 2.25: Blend Space 1D Axis Settings

  10. Head down to the Sample Interpolation section and set Target Weight Interpolation Speed Per Sec to 5.0.
  11. Drag and drop the ThirdPersonIdle, ThirdPersonWalk, and ThirdPersonRun animations into the graph separately:
    Figure 2.26: Blend Space previewer

    Figure 2.26: Blend Space previewer

  12. Under the Asset Details tab, in Blend Samples, set the following variable values:
    Figure 2.27: Blend Samples

    Figure 2.27: Blend Samples

  13. Click Save and close this Asset.
  14. Right-click inside the Content folder, and from the Animation section, select Animation Blueprint.
  15. In the Target Skeleton section, select UE4_Mannequin_Skeleton and then click the OK button:
    Figure 2.28: Creating the Animation Blueprint asset

    Figure 2.28: Creating the Animation Blueprint asset

  16. Name the file Anim_Mannequin and press Enter.
  17. Double-click the newly created Anim_Mannequin file.
  18. Next, go to the Event Graph tab.
  19. Create a boolean variable called IsInAir? by clicking the + icon in the variable section on the bottom left side. Be sure to assign the proper type:
    Figure 2.29: Adding variables

    Figure 2.29: Adding variables

  20. Create a float variable called Speed.
  21. Drag off the Try Get Pawn Owner return value node and type in Is Valid. Select the bottom one:
    Figure 2.30: Event Graph Is Valid node

    Figure 2.30: Event Graph Is Valid node

  22. Connect the Exec pin from the Event Blueprint Update Animation node to the Is Valid node:
    Figure 2.31: Connecting nodes

    Figure 2.31: Connecting nodes

  23. From the Try Get Pawn Owner node, use the Get Movement Component node.
  24. From the node obtained in Step 22, get the Is Falling node and connect the Boolean return value to a set node for the Is in Air? Boolean. Connect the SET node exec pin with the Is Valid exec pin:
    Figure 2.32: Is in Air Boolean setup

    Figure 2.32: Is in Air Boolean setup

  25. From the Try Get Pawn Owner node, use the Get Velocity node, get its VectorLength, and connect the output to the A Variable Set node of Speed:
    Figure 2.33: Speed Boolean setup

    Figure 2.33: Speed Boolean setup

  26. Next, head to the Anim Graph tab.
  27. Right-click anywhere inside AnimGraph, type state machine, and click on Add New State Machine:
    Figure 2.34: The Add New State Machine option

    Figure 2.34: The Add New State Machine option

  28. Make sure the node is selected and then press F2 to rename it MannequinStateMachine.
  29. Connect the output pin of MannequinStateMachine to the input pin for the Output Pose node and click the compile button on the top bar:
    Figure 2.35: Configuring the State Machine result in the Output Pose node

    Figure 2.35: Configuring the State Machine result in the Output Pose node

  30. Double-click the MannequinstateMachine node to enter the State Machine. You will see an Entry node. The state that will be connected to it will become the default state of the mannequin. In this exercise, this will be our Idle Animation.
  31. Right-click on an empty area inside the State Machine, and from the menu, select Add State. Press F2 to rename it Idle/Run.
  32. Drag from the icon next to the Entry text, point it inside the Idle/Run node, and then release it to connect it:
    Figure 2.36: Connecting Added State to Entry

    Figure 2.36: Connecting Added State to Entry

  33. Double-click on the Idle/Run state to open it.
  34. From the Asset Browser menu in the bottom-right corner, select and drag the BS_IdleRun Animation onto the graph. Get the Speed variable from the Variable section on the left and connect it, as shown here:
    Figure 2.37: Idle/Run state setup

    Figure 2.37: Idle/Run state setup

  35. Head back to MannequinStateMachine by clicking on its breadcrumb in the top banner:
    Figure 2.38: State Machine navigation breadcrumb

    Figure 2.38: State Machine navigation breadcrumb

  36. From the Asset Browser menu, drag and drop the ThirdPersonJump_Start Animation into the graph. Rename it Jump_Start.
  37. Repeat Step 35 for ThirdPersonJump_Loop and ThirdPerson_Jump and rename them Jump_Loop and Jump_End, respectively:
    Figure 2.39: State setup

    Figure 2.39: State setup

  38. Open the Jump_Start state. Click on the Play ThirdPersonJump_Start node. Uncheck Loop Animation in the Settings section.
  39. Open the Jump_Loop state and click on the Play ThirdPersonJump_Loop node. Set Play Rate to 0.75.
  40. Open the Jump_End state and click on the Play ThirdPerson_Jump node. Uncheck the Loop Animation Boolean.
  41. Since we can shift from Idle/Run to Jump_Start, drag from the Idle/Run state and drop it to the Jump_Start state. Similarly, Jump_Start leads to Jump_Loop, then to Jump_End, and finally back to Idle/Run.

    Drag and drop the arrows to set up the State Machine, as follows:

    Figure 2.40: State connections

    Figure 2.40: State connections

  42. Double-click the Idle/Run to Jump_Start transition rule icon and connect the output of the Is in Air? variable to the result:
    Figure 2.41: Idle/Run to Jump_Start transition rule setup

    Figure 2.41: Idle/Run to Jump_Start transition rule setup

  43. Open the Jump_Start to Jump_Loop transition rule. Get the Time Remaining (ratio) node for ThirdPersonJump_Start and check whether it is less than 0.1. Connect the resulting bool to the result:
    Figure 2.42: Jump_Start to Jump_End transition rule setup

    Figure 2.42: Jump_Start to Jump_End transition rule setup

  44. Open the Jump_Loop to Jump_End transition rule. Connect the output of the inverse of the Is in Air? variable to the result:
    Figure 2.43: Jump_Loop to Jump_End transition rule setup

    Figure 2.43: Jump_Loop to Jump_End transition rule setup

  45. Open the Jump_End to Idle/Run transition rule. Get the Time Remaining (ratio) node for ThirdPerson_Jump and check whether it is less than 0.1. Connect the resulting bool to the result:
    Figure 2.44: Jump_End to Idle/Run transition rule setup

    Figure 2.44: Jump_End to Idle/Run transition rule setup

  46. Close the Animation Blueprint.
  47. In the Content folder, browse to Content -> ThirdPersonBP -> Blueprints folder and open the ThirdPersonCharacter Blueprint.
  48. Select Mesh in the Components tab:
    Figure 2.45: Mesh component

    Figure 2.45: Mesh component

  49. In the Details tab, set Anim Class to the Animation Blueprint class that you created:
    Figure 2.46: Specifying the Animation Blueprint in the Skeletal Mesh component

    Figure 2.46: Specifying the Animation Blueprint in the Skeletal Mesh component

  50. Close the Blueprint.
  51. Play the game again and notice the animations.

    The following should be the output you achieve. As you can see, our character is running, and the running animation is being shown:

    Figure 2.47: Character running animation

Figure 2.47: Character running animation

Note

You can find the complete exercise code files on GitHub, in the Chapter02 -> Exercise2.05 -> Ex2.05-Completed.rar directory, at the following link: https://packt.live/3kdIlSL

After extracting the .rar file, double-click the .uproject file. You will see a prompt asking Would you like to rebuild now?. Click Yes on that prompt so that it can build the necessary intermediate files, after which it should open the project in Unreal Editor automatically.

By completing this exercise, you've understood how to create State Machines, a Blend Space 1D, the Animation Blueprint, and how to tie it all together with the Skeletal Mesh of a character. You've also worked on play rates, transitional speed and the transitional states, helping you understand how the world of animation intricately ties in together.

We kicked off this section by understanding how State Machines are used to represent and transition in-between Animation States. Next, we got to know how a Blend Space 1D gives us blending in-between those transitions. All this is used by the Animation Blueprint to decide what the current animation of the character is. Now, let's combine all these concepts together in an activity.

Activity 2.01: Linking Animations to a Character

Let's say, as an Unreal games developer, you've been provided with a character skeletal mesh and its animations, and you've been tasked with integrating them inside a project. In order to do that, in this activity, you'll be creating an Animation Blueprint, State Machines, and a Blend Space 1D of a new character. By completing this activity, you should be able to work with animations in Unreal Engine and link them to skeletal meshes.

The activity project folder contains a Third Person Template project, along with a new character, Ganfault.

Note

This character and its animations were downloaded from mixamo.com. These have been placed in the Content -> Ganfault folder on our GitHub repository: https://packt.live/35eCGrk

Mixamo.com is a website that sells 3D characters with animations and is sort of an asset marketplace only for 3D models. It also contains a library of free models, alongside the paid ones.

The following steps will help you complete this activity:

  1. Create a Blend Space 1D for the Walking/Running animation and to set up the Animation Blueprint.
  2. Next, go to Content -> ThirdPersonBP -> Blueprints and open the ThirdPersonCharacter Blueprint.
  3. Click the Skeletal Mesh component on the left, and inside the Details tab on the right, replace the SkeletalMesh reference with Ganfault.
  4. Similarly, update the Animations Blueprint section of the skeletal mesh component with the Animation Blueprint you created for Ganfault.

    Note

    For the State Machine, implement only Idle/Run and Jump State.

Once you've completed this activity, the Walk/Run and Jump animations should be working properly, as shown in the following output:

Figure 2.48: Activity 2.01 expected output (Left: Run; Right: Jump)

Figure 2.48: Activity 2.01 expected output (Left: Run; Right: Jump)

Note

The solution to this activity can be found at: https://packt.live/338jEBx.

By completing this activity, you now know how to navigate your way around Unreal Engine with regard to the project, debugging code, and working with Animations. You also understand State Machines, which represent transitions between the Animation States and the Blend Spaces 1D used in that transition. You are now able to add animation to 3D models based on gameplay events and inputs.

Previous PageNext Page
You have been reading a chapter from
Game Development Projects with Unreal Engine
Published in: Nov 2020Publisher: PacktISBN-13: 9781800209220
Register for a free Packt account to unlock a world of extra content!
A free Packt account unlocks extra newsletters, articles, discounted offers, and much more. Start advancing your knowledge today.
undefined
Unlock this book and the full library FREE for 7 days
Get unlimited access to 7000+ expert-authored eBooks and videos courses covering every tech area you can think of
Renews at $15.99/month. Cancel anytime

Authors (4)

author image
Hammad Fozi

Hammad Fozi comes from a gaming background and has been extensively working on Unreal Engine since 2017. He has been part of some very successful AAA projects such as Virtua FanCave (and Metaverse), Unnamed AAA Sci-Fi DJ Experience, Heroes and Generals, and Creed: Rise to Glory VR. Hammad has worked with teams who have had experience working at Ubisoft, Warner Bros. Games, 2K Games, and more! He has successfully helped teams consisting of 10–30 people to scale to 150+ in size over his very short yet impressive career. Hammad currently works as a senior C++ game developer and has extensive experience in working with VR and augmented reality, PC/PS5/Xbox/Android/iOS/macOS game development, and Web3/Metaverse/NFT systems (within Unreal Engine).
Read more about Hammad Fozi

author image
Gonçalo Marques

Gonçalo Marques has been an active gamer since the age of 6. He has been using Unreal Engine since 2016 and has done freelance and consulting work using the engine. Gonçalo also released a free and open source plugin called UI Navigation, which has garnered an extremely positive reception with over 100,000 downloads and is still receiving frequent updates and fixes. Thanks to the development of this plugin, he became an Epic MegaGrant recipient. He is now working at Funcom ZPX, a game studio in Lisbon that has contributed to games such as Conan Exiles, Mutant Year Zero, and Moons of Madness. Gonçalo is currently working on a new Funcom game in the Dune universe.
Read more about Gonçalo Marques

author image
David Pereira

David Pereira started making games in 1998 when he learned how to use Clickteam's The Games Factory. He graduated in computer science from FCT-UNL, where he learned about C++, OpenGL, and DirectX, which allowed him to create more complex games. After working in IT consulting for a few years, he joined Miniclip in Portugal where he worked on popular mobile games such as 8 Ball Pool, Gravity Guy 1 and Gravity Guy 2, Extreme Skater, iStunt2, Hambo, and many others. Since then, he has been the lead developer for MPC in the John Lewis Christmas VR Experience, worked on an earlier version of Mortal Shell, and did volunteer work teaching people with Asperger's how to make games with Unreal Engine 4. Today, he's working on his own game, a soon-to-be-announced first-person action RPG.
Read more about David Pereira

author image
Devin Sherry

Devin Sherry is originally from Levittown, NY, located on Long Island. He studied the topics of Game Development and Game Design at the University of Advancing Technology where he had earned his Bachelor of Arts in Game Design in 2012. During his time in college, Devin worked as a game and level designer with a group of students called Autonomous Games on a real-time strategy styled, third-person shooter called The Afflicted using Unreal Engine 3/UDK where it was presented at GDC in 2013 at the GDC Play Showcase. Today, Devin works as an independent game developer located in Tempe, Arizona, where he works on personal and contracted projects. His achievements include the title Radial Impact, which can be found in the Community Contributions section of the Learn Tab of Unreal Engine 4's Launcher, and his work on his YouTube Channel, Devin Level Design, where he educates viewers on game development within Unreal Engine 3, UDK, and Unreal Engine 4.
Read more about Devin Sherry