For this game project, I wanted to challenge myself making a Networked Game that is hosted by Amazon Web Services as well as work more with Animations and the Character Animation Blueprint.
I chose to make a "Zombie Shooter" purely for the fact of I thought it would be a fun game to play with my Friends. I am a big fan of Call of Duty Zombies and other Horde shooters so I decided I would make a "smaller" version of that to play with my friends.
In all games I work on in Unreal, I incorporate the Gameplay Ability System. This is because it is a very powerful, flexible and networked plugin that allows me to create awesome experiences and games.
The Gameplay Ability System drives all of the Enemies and Players attacks, as well as their animations, Health, Damage, Movement, Respawning and so much more.
I use the in-built GameplayEffects and Custom Gameplay Executions to perform more complex Damage calculations as well as playing Particle Effects!
For now, I have Forked Unreal Engine and I am currently using 5.7. I have downloaded the initial Plugins required to get AWS operational but the main plan is to get AWS into my game and use their servers to host a game session for me and my friends to play on!
The more I work on this the more updates I will provide!
This is a small gameplay sample. In this I am running the game in Client Mode, checking to see if the enemies, player, abilities and health are all working and being replicated correctly.
During this video as well, all the Enemies are in a Loaded pool that was initialized on Launch as well as the Rangers "Bullets", I am also making sure they are appearing for the Client and are dealing damage and being correctly De-Initialized.

I heavily utilise Unreal Engine's Gameplay Ability System, this controls almost everything on both the Player and Enemies, as well as all Droppable Objects.
The Player has one Ability that is activated via Left Click which is the Shooting. This Gameplay Ability is Sub-classed and shoots out a Line Trace, which impacting an Enemy Zombie will apply a Gameplay Effect that will deal damage!
Zombies in the game have two abilities which are assigned depending on the Zombie Class, first we have the standard (melee) Zombie, this enemy will play a Melee Animation which with the help of the Wait Gameplay function in Blueprints, it applies damage during the "hitting" portion of the Animation, dealing damage to the player.
The Ranger Skeleton has a Shoot Ability, which loads in a Bullet and fires it off towards the Player. This ability applies its GameplayEffectSpec to the Bullet Object and this is the Damage Payload, so when it interacts with the Player, it will deal damage!
Droppable Items, so far there is only a Health Kit in the Game, this Health Kit has a Gameplay Effect applied to it, which when it interacts with the Player, it will heal them for an amount, keeping the player healthy during Gameplay.

The Attribute Set is a vital part of the Gameplay Ability System, it holds all of our Attributes we wish to store and update based on the games situation. The Attribute Set, like Gameplay Abilities comes with in-built replication. In this game we have Health, Max Health, Movement, Damage and Critical Chance.
All of these values can be accessed via Blueprints to allow for custom Widgets to call on these functions and display values as they change (Like the Player Health and Enemy Health!).

For optimization, I created an Object Pool, this loads in two object types, one being the Zombies and other being the Bullets.
These are loaded by the Server, reducing the load on the Clients, the Zombies and Bullets are loaded in during the Initialization of the Game, then "Activated" by the Object when they are needed.
For the Zombies, this occurs when they are "spawned" in via their Spawner. I grab a random Zombie in the Loaded Array, call their "Activate" function and set them loose against the Player, and upon their death, I de-activate them.
For the Bullets, I load in roughly 100 bullets that the Ranger Skeletons use to shoot at the player. Each Bullet has a life of 8 seconds (unless it collides with an Object or Player).
Creating these pools heavily reduced frame drops when I would Instantiate them in normally, and also I would be instantiating them on the Client rather then the Server.
We use cookies to analyze website traffic and optimize your website experience. By accepting our use of cookies, your data will be aggregated with all other user data.