With the last week of the unit and handing in a bit early, I decided to start on a research project looking into the Gameplay Ability System framework in UE5. After attending the workshop in Lyra giving a brief overview, I saw a ton of potential in how it could be leveraged as a tool for collaboration with designers.
To start, I wanted to build the basis / backend of this framework from scratch, as I feel like it would give me the best insight into how it works. It is supplied from the plugin provided by Unreal, with the functionality built by the developer in the Ability System Component. This is a custom actor component that is scalable, and modular, meaning it can be replicated across network and placed on any character within the game, (Player and NPCs). With the supplied component, all actors can communicate with one another with very lightweight gameplay tags. The communication is built from a shared language of Gameplay Abilities, Gameplay Effects and Attributes. All these datasets are made to be very easy to use (hardly any scripting needed aside from the backend built from the developer (me)) and can be assigned specific tags that are placed on source and target actors that are interacting in the world. These tags are recognized by the Ability System Component, which applies the correct effects to be applied when necessary. For example, a Gameplay Ability called “Attack” could be fired by one character, if another is in range of that attack, a Gameplay Tag called “Melee” would be placed on that actor, which would trigger a TakeDamage event in the Ability System Component. BUT… If that target Actor had a previous Tag applied to it called “Invulnerable” the “Damage” Tag would not be applied, therefore no damage event would be triggered.

This is the ultimate simple form of this system in action. This can be extended into a deeply complex RPG with dozens of status effects, attack types, and Actor types. Each would have a replicated version of the Base Ability System Component, with Base Attributes assigned. Made from these base classes, the subsets of child datasets could be tweaked very easily in whatever way necessary.






Here is the ultimate simple form working below. Two characters built from the same Class. The other difference between them is the skeletal mesh to differentiate between them. With no written blueprints or code, the player character can attack this character. Triggering the tagged event and affecting its health.
This research project is just starting, but I would like to continue it on the side as a portfolio piece and see if I can implement this functionality into future collaborative projects with a larger scale.