My Idle Breakout game welcomes a second player !
▲ 3 r/devblogs+1 crossposts

My Idle Breakout game welcomes a second player !

I thought it would be fun to have a versus mode, so here it is (local). But in last few weeks I also worked on theses points :

1 : Power Bars
Brick destroyed now fills a power bar, once the bar is full, player can consume it to trigger it's ball special ability. For now, abilities are not integrated yet, but it's my next step !

2 : UI
Ui is my nightmare. I tried to avoid this step for a while, but now, it's time to start. BUT, thanks to this awesome youtube tutorial , it turned to be pretty simple to get started. I like to work the game feel as the game goes, so I had to update my animation tool so it now supports some UI components. Also, as the feedbacks gets more intensive, I had to do a performance pass on it.

This is how it looks so far.

I'm curious to get your opinion on the game so far.

Thanks for reading !

youtu.be
u/Waste-Efficiency-274 — 7 days ago
▲ 14 r/devblogs+3 crossposts

Profiling and Optimizing an Unity Animation System

On the right : 5,000 cubes. Each of these cubes has its own position animation. Since a position uses 3 axes, this represents a total of 15,000 curve evaluations per frame in 4ms.

On the left : a single cube playing 10,000 simultaneous position animations in 4.6ms, which is equivalent to 30,000 curve evaluations per frame.

Today, I’d like to share some of the optimizations I implemented to achieve these results, in the hope that they might help in your own projects… Of course, optimizations are always contextual. I’ll explain my goals so you can judge for yourself whether these techniques are relevant to your situation.

You see, I’m developing an animation tool focused on rapidly integrating visual feedback (game feel) in Unity. My goal is to be able to animate any property of a GameObject while respecting three core principles: additivity, reversibility, and scale.

To achieve this level of scale, my tool needs to evaluate thousands of animation curves every frame, perform the required calculations, and apply all transformations. Until recently, only my architecture was pointing in this direction, but two weeks ago I started taking a closer look at the profiler, and here are some of the optimizations I was able to implement.

1: Baking animation curves

I need to evaluate large numbers of animation curves every frame:

public AnimationCurve Curve;

float Evaluate(float t)
{
   return Curve.Evaluate(t);
}

One way to optimize this is to bake animation curves to achieve much faster evaluation.

public AnimationCurve Curve;
float[] BakedCurve;
int Resolution = 512;
float Evaluate(float t)
{
   t = Mathf.Repeat(t, 1f);
   int index = (int)(t * (Resolution - 1));
   return BakedCurve[index];
}
void Bake(AnimationCurve curve)
{
   float[] baked = new float[Resolution];
   for (int i = 0; i < Resolution; i++)
   {
       float t = (float)i / (Resolution - 1);
       baked[i] = curve.Evaluate(t);
   }
}

Ouch, big problem. This change was supposed to give me a significant performance boost, yet my profiler was suddenly dying… And that’s where context matters. In a game, visual feedback is rarely active for long periods. Instead, we tend to trigger many short bursts of effects one after another. As a result, I ended up baking curves every frame!

Fortunately, the solution is quite simple: using a unique hash generated whenever a curve is modified in the inspector, I can cache baked curves for fast access.

Dictionary<int, float[]> BakedCurves = new Dictionary<int, float[]>();
public int GetHashForCurve()
{
   HashCode hash = new HashCode();
   foreach (Keyframe k in Curve.keys)
   {
       hash.Add(k.time);
       hash.Add(k.value);
       hash.Add(k.inTangent);
       hash.Add(k.outTangent);
       hash.Add(k.inWeight);
       hash.Add(k.outWeight);
       hash.Add((int)k.weightedMode);
   }
   hash.Add((int)Curve.preWrapMode);
   hash.Add((int)Curve.postWrapMode);
   return hash.ToHashCode();
}
public float[] Fetch(int hash, AnimationCurve curve)
{
   if (BakedCurves.TryGetValue(hash, out float[] baked))
       return baked;
   return Store(hash, curve);
}
float[] Store(int hash, AnimationCurve curve)
{
   float[] baked = new float[Resolution];
   for (int i = 0; i < Resolution; i++)
   {
       float t = (float)i / (Resolution - 1);
       baked[i] = curve.Evaluate(t);
   }
   BakedCurves.Add(hash, baked);
   return baked;
}

2: Avoiding unnecessary comparisons

Before applying changes, I need to ensure the targeted component still exists:

Transform transform = GetComponent(); // Cached
Vector3 Offset = Vector3.zero;
foreach (Layer l in Layers)
{
   // Offset calculation logic
}
if (transform != null)
   transform.position = Offset;

You can see that the comparison and the position assignment still happen even when no animation layer actually modified the value. In isolation, this is negligible, but across tens of thousands of calls per frame, the cost starts to add up.

The solution was simple: adding a boolean IsDirty. This way I check and apply changes only when a modification actually occurred.

Transform transform = GetComponent(); // Cached
Vector3 Offset = Vector3.zero;
bool IsDirty = false;
foreach (Layer l in Layers)
{
   // Offset calculation logic
   IsDirty = true;
}
if (IsDirty && transform != null)
   transform.position = Offset;

3: Optimizing iterations

I didn’t realize how expensive my foreach loops were at the scale I was targeting.

public List<string> List = new List<string>();
foreach (string s in List)
{
   // Do something
}

Each foreach first creates an enumerator, which then performs multiple operations on every MoveNext. And I have TONS of loops like this in my code…

The target was clear. I built a small utility class that keeps the enumerator-like state and allows me to iterate more efficiently:

namespace FeelCraft.Core.Trackers.Utils
{
   public class EnumerableList<T>
   {
       public bool Active = false;
       public IEnumerator<T> Enumerator;
       public List<T> List;
       public int Index = -1;
       public int Count = 0;
       public EnumerableList()
       {
           List = new List<T>();
       }
       public void Refresh()
       {
           Index = -1;
           Count = List.Count;
           Active = Count > 0;
           Enumerator = List.GetEnumerator();
       }
       public bool MoveNext()
       {
           Index++;
           if (Index >= Count)
           {
               Index = -1;
               return false;
           }
           return true;
       }
       public T Current
       {
           get { return List[Index]; }
       }
   }
}
public EnumerableList<string> MyList = new EnumerableList<string>();
string s = "";
for (int i = 0; i < Count; i++)
{
   while (MyList.MoveNext())
   {
       s = MyList.Current;
       // Do something
   }
}

On 1,000,000 iterations, the foreach version takes 147ms, while my custom class reduces this to 55ms.

But do not use this code : it's trash...  Because in trying to be clever, I fell straight into a reasoning bias… I was so focused on the idea of the enumerator that I didn’t even consider the simplest solution... It's only after refactoring all my iterations that I realized a much simpler and faster approach existed 🤦

for (int j = 0; j < List.Count; j++)
{
   s = List[j];
}

Just like that.
8ms for 1,000,000 iterations

All these optimizations played a role in v2.2.0 of my tool to stack tens of thousands of simultaneous animations and offer a linear scale across both multi-object expension and multi-animation stacking. That's perfect for building small indie projects or being fully equipped for Game Jams. For creating projects packed with game feel. Projects that make both the player and developer experience incredibly satisfying!

If you're curious, feel free to check out the tool page on itch or on the asset store

Thanks for reading ! :)

youtu.be
u/Waste-Efficiency-274 — 8 days ago
▲ 0 r/itchio

Think Photoshop... But for Procedural Voxel Generation

At the heart of VoxelCraft is its Layer System, think Photoshop, but for terrain. Each layer controls a different aspect of your world. And the best part ? You don’t need to write a single line of code.

Key Features:

  • Easy-to-Use Layer System – Build complex terrains by stacking and customizing layers
  • Flexible Noise + Map Support – Use Perlin, custom textures, or your own creativity
  • Runs Smoothly – Great for runtime or in-editor use, from mobile games to PC
  • Designer-Friendly – Built with non-tech users in mind

Whether you’re prototyping, building a full game, or just love playing with voxels, VoxelCraft makes it fast, fun, and flexible.

codingmojo.itch.io
u/Waste-Efficiency-274 — 10 days ago

Idle Breakout - Image to Level Experiment

To make my life easier, I came up with the idea of creating the levels for my Idle-Breakout from pixel art images, and the craziest part is that it actually works!

It all started from a tutorial I published on my youtube channel about how to create a very basic Breakout game. At the end of the video, I encouraged viewers to customize it as a way to deepen their learning, but I received a few comments from people who simply lacked ideas to experiment with.

So I decided to lead by example.

The idea came to me pretty quickly : modernize classic arcade Breakout with a versus mode and remove the paddle to turn it into an idle game!

It was only supposed to be a small creative exercise, material for a new video. But I wanted a visually appealing level, and the way levels were created in this simplified version was incredibly tedious... A huge 2D array of integers that had to be filled manually, where each integer represented a specific color. Not only was it time-consuming to create, but it was also extremely difficult to visualize the final result, if not outright impossible once the level reached a certain size.

"It would be so much easier to draw my image in pixel art and interpret it as a level."

An idea mostly born from laziness, I have to admit. But in the end, I absolutely love the result!

Wondering how it works? It's actually pretty simple. I have two pixel art images : one for the background and one for the foreground. The code loads both images and creates a brick for every pixel in the image. If a pixel is transparent, it gets ignored. Pixels located along the edges of the foreground generate indestructible blocks.

With SRP optimization, it works flawlessly for a level like this one, which contains roughly 3,000 cubes. A steady 120 FPS, even though each cube has a different color applied using material.SetColor().

But I quickly came back down to earth when I tried building a larger level. At around 5,000 cubes, I was already down to 30 FPS. And that's without any gameplay at all, just rendering the cubes.

Using a Material Property Block? Bad idea, the result was even worse... 9 FPS. Vertex colors? Well, I'll spare you the days of trial and error... Eventually, out of options, I made a post on Reddit and someone suggested using RSUV combined with GPU Instancing. Completely new territory for me, I had never even heard of it before. After a bit of reading, a few lines of code, and a brand-new shader with RSUV support, I suddenly had a completely new way of changing the colors of my bricks!

Boom ! 25,000 bricks, still running at 120 FPS. Wonderful. That's my solution. More than enough to create levels up to 128x128 pixels, although I doubt I'll ever go beyond 64x64 anyway, so there's no need to optimize further than that.

But... I ran into another small problem... My visual feedback tool, Feel Craft, the one I use to create all the little animations you can see in my videos, didn't yet support color animations driven by RSUV... No matter, I pushed an update to my tool right away!

The current designs are cute, but I don't think they're particularly satisfying to play. I'll need to find an aesthetic that allows the ball to bounce around and enter bounce tunnels... I'll give it some thought over the next few days!

In the meantime, I hope you enjoyed the read 😄

u/Waste-Efficiency-274 — 19 days ago
▲ 6 r/itchio

Idle Breakout - Image To Level Experiment

To make my life easier, I came up with the idea of creating the levels for my Idle-Breakout from pixel art images, and the craziest part is that it actually works!

It all started from a tutorial I published on my youtube channel about how to create a very basic Breakout game. At the end of the video, I encouraged viewers to customize it as a way to deepen their learning, but I received a few comments from people who simply lacked ideas to experiment with.

So I decided to lead by example.

The idea came to me pretty quickly : modernize classic arcade Breakout with a versus mode and remove the paddle to turn it into an idle game!

It was only supposed to be a small creative exercise, material for a new video. But I wanted a visually appealing level, and the way levels were created in this simplified version was incredibly tedious... A huge 2D array of integers that had to be filled manually, where each integer represented a specific color. Not only was it time-consuming to create, but it was also extremely difficult to visualize the final result, if not outright impossible once the level reached a certain size.

"It would be so much easier to draw my image in pixel art and interpret it as a level."

An idea mostly born from laziness, I have to admit. But in the end, I absolutely love the result!

Wondering how it works? It's actually pretty simple. I have two pixel art images : one for the background and one for the foreground. The code loads both images and creates a brick for every pixel in the image. If a pixel is transparent, it gets ignored. Pixels located along the edges of the foreground generate indestructible blocks.

With SRP optimization, it works flawlessly for a level like this one, which contains roughly 3,000 cubes. A steady 120 FPS, even though each cube has a different color applied using material.SetColor().

But I quickly came back down to earth when I tried building a larger level. At around 5,000 cubes, I was already down to 30 FPS. And that's without any gameplay at all, just rendering the cubes.

Using a Material Property Block? Bad idea, the result was even worse... 9 FPS. Vertex colors? Well, I'll spare you the days of trial and error... Eventually, out of options, I made a post on Reddit and someone suggested using RSUV combined with GPU Instancing. Completely new territory for me, I had never even heard of it before. After a bit of reading, a few lines of code, and a brand-new shader with RSUV support, I suddenly had a completely new way of changing the colors of my bricks!

Boom ! 25,000 bricks, still running at 120 FPS. Wonderful. That's my solution. More than enough to create levels up to 128x128 pixels, although I doubt I'll ever go beyond 64x64 anyway, so there's no need to optimize further than that.

But... I ran into another small problem... My visual feedback tool, Feel Craft, the one I use to create all the little animations you can see in my videos, didn't yet support color animations driven by RSUV... No matter, I pushed an update to my tool right away!

The current designs are cute, but I don't think they're particularly satisfying to play. I'll need to find an aesthetic that allows the ball to bounce around and enter bounce tunnels... I'll give it some thought over the next few days!

In the meantime, I hope you enjoyed the read 😄

u/Waste-Efficiency-274 — 19 days ago

Idle Breakout [0.0.2] : From Images To Levels

To make my life easier, I came up with the idea of creating the levels for my Idle-Breakout from pixel art images, and the craziest part is that it actually works!

It all started from a tutorial I published on my youtube channel about how to create a very basic Breakout game. At the end of the video, I encouraged viewers to customize it as a way to deepen their learning, but I received a few comments from people who simply lacked ideas to experiment with.

So I decided to lead by example.

The idea came to me pretty quickly : modernize classic arcade Breakout with a versus mode and remove the paddle to turn it into an idle game!

It was only supposed to be a small creative exercise, material for a new video. But I wanted a visually appealing level, and the way levels were created in this simplified version was incredibly tedious... A huge 2D array of integers that had to be filled manually, where each integer represented a specific color. Not only was it time-consuming to create, but it was also extremely difficult to visualize the final result, if not outright impossible once the level reached a certain size.

"It would be so much easier to draw my image in pixel art and interpret it as a level."

An idea mostly born from laziness, I have to admit. But in the end, I absolutely love the result!

Wondering how it works? It's actually pretty simple. I have two pixel art images : one for the background and one for the foreground. The code loads both images and creates a brick for every pixel in the image. If a pixel is transparent, it gets ignored. Pixels located along the edges of the foreground generate indestructible blocks.

https://reddit.com/link/1u550ba/video/m8qdiqbpt47h1/player

With SRP optimization, it works flawlessly for a level like this one, which contains roughly 3,000 cubes. A steady 120 FPS, even though each cube has a different color applied using material.SetColor().

But I quickly came back down to earth when I tried building a larger level. At around 5,000 cubes, I was already down to 30 FPS. And that's without any gameplay at all, just rendering the cubes.

Using a Material Property Block? Bad idea, the result was even worse... 9 FPS. Vertex colors? Well, I'll spare you the days of trial and error... Eventually, out of options, I made a post on Reddit and someone suggested using RSUV combined with GPU Instancing. Completely new territory for me, I had never even heard of it before. After a bit of reading, a few lines of code, and a brand-new shader with RSUV support, I suddenly had a completely new way of changing the colors of my bricks!

Boom ! 25,000 bricks, still running at 120 FPS. Wonderful. That's my solution. More than enough to create levels up to 128x128 pixels, although I doubt I'll ever go beyond 64x64 anyway, so there's no need to optimize further than that.

https://reddit.com/link/1u550ba/video/yl8qgm1yt47h1/player

But... I ran into another small problem... My visual feedback tool, Feel Craft, the one I use to create all the little animations you can see in my videos, didn't yet support color animations driven by RSUV... No matter, I pushed an update to my tool right away!

The current designs are cute, but I don't think they're particularly satisfying to play. I'll need to find an aesthetic that allows the ball to bounce around and enter bounce tunnels... I'll give it some thought over the next few days!

In the meantime, I hope you enjoyed the read 😄

reddit.com
u/Waste-Efficiency-274 — 22 days ago

Idle Breakout [0.0.2] : From Images to Levels

To make my life easier, I came up with the idea of creating the levels for my Idle-Breakout from pixel art images, and the craziest part is that it actually works!

It all started from a tutorial I published on my youtube channel about how to create a very basic Breakout game. At the end of the video, I encouraged viewers to customize it as a way to deepen their learning, but I received a few comments from people who simply lacked ideas to experiment with.

So I decided to lead by example.

The idea came to me pretty quickly : modernize classic arcade Breakout with a versus mode and remove the paddle to turn it into an idle game!

It was only supposed to be a small creative exercise, material for a new video. But I wanted a visually appealing level, and the way levels were created in this simplified version was incredibly tedious... A huge 2D array of integers that had to be filled manually, where each integer represented a specific color. Not only was it time-consuming to create, but it was also extremely difficult to visualize the final result, if not outright impossible once the level reached a certain size.

"It would be so much easier to draw my image in pixel art and interpret it as a level."

An idea mostly born from laziness, I have to admit. But in the end, I absolutely love the result!

Wondering how it works? It's actually pretty simple. I have two pixel art images : one for the background and one for the foreground. The code loads both images and creates a brick for every pixel in the image. If a pixel is transparent, it gets ignored. Pixels located along the edges of the foreground generate indestructible blocks.

With SRP optimization, it works flawlessly for a level like this one, which contains roughly 3,000 cubes. A steady 120 FPS, even though each cube has a different color applied using material.SetColor().

But I quickly came back down to earth when I tried building a larger level. At around 5,000 cubes, I was already down to 30 FPS. And that's without any gameplay at all, just rendering the cubes.

Using a Material Property Block? Bad idea, the result was even worse... 9 FPS. Vertex colors? Well, I'll spare you the days of trial and error... Eventually, out of options, I made a post on Reddit and someone suggested using RSUV combined with GPU Instancing. Completely new territory for me, I had never even heard of it before. After a bit of reading, a few lines of code, and a brand-new shader with RSUV support, I suddenly had a completely new way of changing the colors of my bricks!

Boom ! 25,000 bricks, still running at 120 FPS. Wonderful. That's my solution. More than enough to create levels up to 128x128 pixels, although I doubt I'll ever go beyond 64x64 anyway, so there's no need to optimize further than that.

But... I ran into another small problem... My visual feedback tool, Feel Craft, the one I use to create all the little animations you can see in my videos, didn't yet support color animations driven by RSUV... No matter, I pushed an update to my tool right away!

The current designs are cute, but I don't think they're particularly satisfying to play. I'll need to find an aesthetic that allows the ball to bounce around and enter bounce tunnels... I'll give it some thought over the next few days!

In the meantime, I hope you enjoyed the read :)

u/Waste-Efficiency-274 — 22 days ago

How to improve my FPS in this situation ?

Hello,

My scene made of cubes has FPS issues, after attacking the issue in multiple directions, I end up with no more ideas to fix it.

https://preview.redd.it/e7v91e9j4d6h1.png?width=1812&format=png&auto=webp&s=36e8bb2b658df0476b9ceba0bb26de22e982046c

What I have so far
- My scene is composed of cubes (~6000)
- There is two materials based on the same shader
- The Shader states to be SRP compatible
- Material has GPU instancing enabled
- Cube color is set using VertexColor and not material.SetColor()

Intriguing facts
- 286k tri for only 6k cubes ?
- 23k draw call, states NON-SRP compatible

Code generating the color :

public void Init(Color32 color, bool immortal)
    {
      ...

      Mesh filter = Skin.GetComponent<MeshFilter>().mesh;
      Color[] colors = new Color[filter.vertexCount];
      for (int i = 0; i < colors.Length; i++)
      {
        colors[i] = color;
      }
      filter.colors = colors;

      ...
    }

Debugger

Debugger : Update Scene

Debugger : Render Play Mode

Shader

https://preview.redd.it/d753d8wp8d6h1.png?width=2158&format=png&auto=webp&s=d53ac6a8bbee37df78bdca32abdaa7f7187cde02

Material

https://preview.redd.it/h4rwun7u8d6h1.png?width=1686&format=png&auto=webp&s=2e1b58a6785d730deec44c6730519de1b0397f87

I really don't undertsand how I break SRP batching rules.
Thanks for your precious help.

----------------
Edit : from frame debugger perspective, the SRP batching is working. But then, I have no idea why my FPS are so low 😮

https://preview.redd.it/gzt9pt8kpd6h1.png?width=2104&format=png&auto=webp&s=eb8bf9144b2dc0835e1ff4e654588434df5ffdd1

reddit.com
u/Waste-Efficiency-274 — 26 days ago
▲ 52 r/SoloDevelopment+1 crossposts

When a $1 Sale Means More Than My Paycheck

I've spent 14 years in the video game industry. Years invested in building a career, discovering the many facets of the development pipeline, bringing other people's projects to life, and fighting my imposter syndrome. It's not easy to feel legitimate when you come from an artistic background and learned how to program as an autodidact.

Over the past months, something has changed.

My career matters less. My imposter syndrome is gone. And a desire has been taking up more and more space in my life: sharing what I've learned.

Like many before me, I started a YouTube channel. There, I share tutorials for beginners, tools for more advanced developers, and exercises for everyone.

As a resource for my tutorials, I sometimes offer the source code on "itch . io" for $1. It's a completely optional purchase, since anyone can achieve the exact same result simply by following the video.

Yesterday, I made my very first sale. And by pure coincidence, it happened on the same day I got paid from my day-job.

Can you believe that this sale, this tiny little one dollar, brought me more joy and satisfaction than my paycheck?

$1 that made me feel useful. $1 that supported my own work. $1 that made me happy.

I'm 40 years old. Am I already starting to lose my mind due to age?

reddit.com
u/Waste-Efficiency-274 — 1 month ago

What turns a tutorial from "educative" to "awesome" ?

I'm trying to improve my youtube channel and especially the quality of my tutorials.
I feel maybe my videos tutorials are too "serious", "technical", and it miss something...

So, what's your opinion ?

reddit.com
u/Waste-Efficiency-274 — 1 month ago

I don't understand theses analytics

I did a small promotion for my video.
The promotion is ended and states 473 paid views
If I go the the video analytics, it states 975 views, 97% from paid promotions.

474 is ruffly only 50% of 975, how comes does it count all views as coming from advertising ?

u/Waste-Efficiency-274 — 2 months ago
▲ 3 r/UnityAssets+1 crossposts

Game Feel Tool - 40% off - Last 24H

Feel Craft helps your game to stand out with immersive, responsive, and natural-feeling gameplay, without the hassle of complex coding.

Add dynamic, responsive, and authentic game feel to any game object. With just a few clicks, you can animate any object and make it react to player input in ways that feel natural, fluid, and rewarding.

Whether it's a state based animation like an idle, looping on itself, or an short reaction to a hit, FeelCraft handles it all, making your games feel more immersive and satisfying.

You can check the tool page here

youtu.be
u/Waste-Efficiency-274 — 2 months ago
▲ 3 r/devblogs+1 crossposts

DevLog - Feel Craft [2.0.2] : That unexpected behaviour

Working on my game feel tool, I discovered an issue affecting properties with limited ranges, especially Colors, which could slowly drift over time.

I originally assumed Unity would allow values outside the usual 0–1 color range to be stored internally, and simply clamp them when rendering. But that’s not how it works: writing a value like 1.4 actually stores 1.

As all my layer system is based on additive and reversible offset, part of the mutation was being lost whenever a channel reached either end of the range, causing inaccuracies over time.

Took me quiet an organisation but I managed to release version 2.0.2 of Feel Craft today, including a proper fix to this issue and an improved Getting Started Demo Scene showcasing several available animation layers.

May you be interested in knowing more about Feel Craft, here is my itch.io page. There is a -40% sale ongoing.

youtu.be
u/Waste-Efficiency-274 — 2 months ago

I’ve been experimenting with a workflow to implement game feel faster for a year now (on and off cause my life busy lately)

The first version had custom UI, its own particle system, and some pretty heavy JSON setup… which honestly made it more complicated than it needed to be.

I recently rebuilt it around Scriptable Objects instead, and stripped a lot of that out to focus on something simpler and more modular.

This is a demo of what I could do in few minutes for my breakout mini-game. What do you think about it ?

If you curious about the actual workflow and how I juiced up that game, here is a 10min tutorial link

Any feedback is very welcome <3

u/Waste-Efficiency-274 — 2 months ago
▲ 1 r/itchio

FeelCraft allows game developers to instantly add dynamic, responsive, and authentic game feel to any game object. With just a few clicks, you can animate any object and make it react to player input in ways that feel natural, fluid, and rewarding.

Whether it's a state based animation like an idle, looping on itself, or an short reaction to a hit, FeelCraft handles it all, making your games feel more immersive and satisfying.

u/Waste-Efficiency-274 — 2 months ago

FeelCraft allows game developers to instantly add dynamic, responsive, and authentic game feel to any game object. With just a few clicks, you can animate any object and make it react to player input in ways that feel natural, fluid, and rewarding.

Whether it's a state based animation like an idle, looping on itself, or an short reaction to a hit, FeelCraft handles it all, making your games feel more immersive and satisfying.

Light Setup : create your game feel in minutes thanks to a simple and efficient layers system based on scriptable objects. Add game feel intuitively then trigger state changes from your code with a simple line.

Easy to master :  Apply rich game feel elements by composing complex behaviours from simple and intuitive sets of animation layers.

Adaptative : Tailor every interaction to your game’s style, whether it’s a light-hearted platformer or a fast-paced action game, FeelCraft gives you full control over how objects move, react, and engage with the player.

Performant : Optimized for All Platforms, FeelCraft is built for performance and can handle thousands of concurent states.

u/Waste-Efficiency-274 — 2 months ago