jeudi 8 janvier 2026

Unreal Engine 5 : Tick groups

Introduction

On game it's sometime to have shape who can control tick speed on actor in this shape. Like a streaming system, object which are far for the player but visible don't need to tick as the same speed as actor near the player.

The idea is inspire by Sea of Thieve talk about managing the tick scale (https://www.unrealengine.com/en-US/events/unreal-fest-europe-2019/aggregating-ticks-to-manage-scale-in-sea-of-thieves)

Architecture

The Idea is to use a subsystem call TickGroupSubsystem which will manager the tick group system. A tick group system have shapes where ticking actor are inside. Depend on if player are inside or near theirs volume, tick group volume will have different tick interval.

When game start, Tick group volume get TickGroupSubsystem and register in it. If actor needs to be inside a TickGroupVolume, user have to add GSTickGroupClient. This component will register actor inside a volume

 The Update Tick Group System

When player spawn, tick group system will detect on which Tick Group volume the player is in. The tickgroup volume will tick are full speed (0.0 tick interval) , for the demo surrounding will tick as lower frequency. Because on this demo it's for a linear game , we just take previous and next tick group of the player current tick group volume

 Tick Group video 

 Github : https://github.com/NicolasBunn/UE5TickGroup.git 

 

  

 

 

dimanche 4 janvier 2026

Unreal Engine 5 : Pool Manager & Projectile Optimization

Features

Pool

Pool system is use to recycle memory and avoid to spawn actor every time it need. Even Unreal Engine have his owns system, every time we spawn actor, it's has to made all the process of actor instantation (memory allocation, component initialization, and constructor execuion, begin play etc etc) which are expensive. On game user can feel a hitch (CPU). 

 By using a pool system, actor are spawn at the beginning in the game on background (hidden,no tick,no collision). When player shoots, we extract a bullet from the pool and make it active

My pool have 2 array : _available_bullet and  _active_bullet . The idea is to eliminate useless iteraction to check to see if bullet is active. When a bullet is need, _available_bullet transfert his bullet to active_bullet. Add a actor on a array it' 0(1) and to avoid that when we delete the actor, array have to reorganize the array, we using RemoveAtSwap.

 Don't use Unreal Engine overlaps

Every time an actor are moving in Unreal. The engine have to : 

- Update Transforms to recompute actor location 
- Spatial Partitioning Update : Unreal reorganize his Bounding Volume Hierarchy , by moving the actor.
- And redo the Collision detection system. 

And this every time the bullet is moving, which happen quite a lot.
For a simple bullet which are moving straigh line it's may be too much. That why I remove the Projectile Component oftenly use on Projectile. Because the bullet goes straigh line, I don't need a heavy component like Projectile Component of Unreal. 

Instead I use a simple travel mathematic function (ActorLocation + velocity * deltatime) and for detection a SweepTrace is enough. The code always destroy bullet and don't manage the interaction.It'sa demo . I also remove Tick and Collision that way Unreal don't add for detection and Tick system which can be an optimization if the pool contain a lot of bullet

Github repository : https://github.com/NicolasBunn/UnrealEnginePoolSystem.git

  

 

 

  

 

lundi 29 décembre 2025

Gameplay Ability System on Unity

 Coming from Unreal Engine 4/5 , I made a simple Gameplay Ability System (GAS) on Unity

Features

Gameplay ability/Gameplay Data

Gameplay Ability are Scritpable Object , like in Unreal Engine it's usa Tag System to owned when active, cancel and blocks other abilities, and can be block or required if Gameplay Ability need some condition to be enable. 

Gameplay ability  can also send and receive gameplay event..The system is for now very simple but it's jsut to implement a simple send gameplay event

  

 

Gameplay Data can be use to send some data on Gameplay Ability, it give possibility to customise data for different actors

Gameplay Ability System

GAS a are monobehaviour script attach to actor. it's main role is to launch gameplay ability

 

User fill a structure to bind Abilities Tag to Abilities, it's can also send Data

 Binding Input to Ability

I'am using Input Asset script I add a structure to bind each input to an ability

 

Input Binding Ability match input with an ability 

 

All the source file are on this link :  https://github.com/NicolasBunn/GAS-in-Unity-.git

 

 


vendredi 19 décembre 2025

Unreal Engine : Enemy Behavior and token system

 On this demo, I show a group of enemy behavior against player.

Architecture

 
Enemy can do 3 actions : 

- Melee attack : Enemy goes to player position and try a melee attacks
-  Shooting attack : Enemy launch a projectile to player
- Strafe : Enemy rotate around player 

Token system

A lot of game like Doom and Lord of the ring use token system. The goal is to avoid that all enemies attacks all at once, enemy try to get token (melee or shooting) to execute action, if not enemy will do passive action (strafe)

Token System  

 

dimanche 14 décembre 2025

OtherSkin

 At Game Atelier I work as gameplay programmer on the game Other Skin on Steam . The game was publish on september 2025. 

Otherskin is a third person action shooter game. When main character Alex kills enemies, she can absorbs skill (calls "morphs") from them. Here is a list of video which display my work. Its mainly to show  morphs and enemies.

Architecture

As a gameplay programmer we are implementing 

For Enemies : Classes and Blueprints, attack (with gameplay ability) animations (anime sequence & montage)  Behavior Tree, VFX,

For Morphs : Classes and blueprint, gameplay ability on main character, UI, VFX 

Video 1 : Upward thrust 

On this video, Alex battles enemy call "Trashfly" (which look like a fly)  which attack in group. Trashly use token system to decide which one attack Alex. 

When Alex kills one enemy it's can absorb "morph" call upward thrust. This morphs give Alex ability to make highter jump and glider to reach higher groud. When Alex aim during upward thrust, slow motion is enable for a moment.

 Trashly and upward thrust morph

Vidéo 2 : Rock Morph

 On this video , enemies are not made by me. Only the morph. Rock morph is a shield which Alex can use to block Rhino charge and block projectiles spawns from Eggs

Rock morph  

 Video 3 : Spay Morph

On this video, Alex fight against Sprayer (which look like elephant) .Sprayer have 2 attacks : Spray projectile & a stomp attach where Sprayer jump toward Alex and create shockwave when land. Note that if Alex is touch by projectile, Spray does a stomp attack

The morph spray look like  Mario Sunshine watering scan. Spray uses to clean corruption on this level. Spray quantity are limited but can be replenish which spray pool

 Sprayer enemy and Spray morph 

Video 4 : Skywalk

On this video, Alex fight against "Skywalk" (which look like spider) Skywalk have 2 attacks : When Skywalk walks it's spawn projectile.. After a random  time, Skywalk rushs towards Alex location ans does a stomp attack.  Skywalk specific feature is that it's have a shield on this leg to block plasma gun , shield can be destroy which a charge shoot..if happen skywalk fall to the ground stuns

The skywalk morph gives Alex the ability "to walk in the sky".. It's have limited of time

 Skywalk enemy and skywalk morph 

  

 

 

Unreal Engine 5 : Game Menu

 This little demo is a showcase of game menu 

 Architecture

Menu is inspire from the game Clair Obscur Expedition 33 and Kuro no Kiseki (Trail through daybreak)

 When open menu , input button are shortcut to open Skill Option Item.

 Every time player open a new menu , Serath model does some animation like Clair Obscur when switching with LB & RB 

 On option I add some item menus: list values, numerical value and slider. 

 Like to video : Unreal Engine 5 Menu  

lundi 1 décembre 2025

Unreal Engine 5 : Goal Point Quest Component

Some quests need player to go on location to start the quest. A Goal Point Quest component is a component on player to display the path to the quest

Architecture

A Goal Point Manager component is on Player. On a Map , level designer can add way point and add them on a BP_GoalPointWaypath. Level blueprint will add them on Goal PointManager Component

Then a Gameplay ability is create GA_SearchGoalPoint, Player will play a animation and a BP_GoalPointScan which show player the path and display all the waypoints

 Video : Goal Quest Point Manager