[FREE] Input Buffering plug-in for Unreal Engine 4

This plug-in can make your games more responsive by introducing Input Buffering to your projects. If you are working on action or fighting games, it’s definitely worth a try. All functionality is exposed via Blueprint, no need to write C++ code.

Basic Edition](Input Buffer Basic in Code Plugins - UE Marketplace)
Advanced Edition](Input Buffer in Code Plugins - UE Marketplace)

InputBuffer_Featured_small.jpg

BASIC FEATURES

  • A new player controller class with an input buffer that allows developers to set up input events and store them in the buffer for future examination.
  • A new asset type of Input Command that consists of sequences of input events and can represent typical input commands such as Quarter-Circle-Forward Punch commonly found in fighting games
  • Ability to tell whether given Input Commands match the contents of input buffer.

ADVANCED FEATURES

  • You can draw input history like practice modes in many fighting games.
  • A thumbnail renderer for Input Commands is also available to make them much more distinguishable by visualization.

TUTORIALS

Engine Version: 4.15-4.16
Supported Development Platforms: All
Supported Target Build Platforms: All
Documentation](https://ue4inputbuffer.wordpress.com/)
Example Project](Dropbox - InputBufferExample.zip - Simplify your life)

This looks really useful, thanks for sharing!

Thank you SO much!!!

New tutorial video added!

Thanks man, i’ll give it a look.

hello, is there anyway to count how many inputs did player make and if there were a lot of them to just ignore them?

You can use UInputBufferComponent::GetLastEvents to retrieve the input in the last frame or UInputBufferComponent::GetHistoryRecords to retrieve the input over multiple frames. Then you can count how many input events there are.

I am not sure what you mean by the last part of your question. Do you mean, you want to ignore inputs if there are a lot of them? If so, first you can set the capacity of your input buffer. If it’s low, then you will never have a lot of inputs in the buffer. Second, you can set a time limit to retrieve inputs of last n seconds.

u can do that in blueprints?
Point is, you see god of war games. its slasher where you have to bash buttons and if you will bash a lot of buttons you will have to wait for every button to finish its animation. so as u said i can set max buffer size to store input number?

Those two function are blueprint callable. It’s a lot easier to count in C++, but it’s still doable in BP. However, I doubt what you want to do needs counting inputs.

Your sentence structure is not easy to follow for me. I do not understand your example nor what you really want to do. There are too many actions you can do in GoW. What is the one you refer to?

To answer your last questin, input buffer is used to store inputs, not the number of inputs. If you want to know the number, you have to count.

Hi Isatin

Still trying to figure out how to make Forwards the axis for facing the opponent. Do i make a variable called forward for this?

This is exactly what i am trying to do.
Can you shed any light on this please?

Developers can override the event translation function to do something like converting left or right to forward or back, which is usually required in fighting games.

Thanks

The thing is you need to register translated events and translate input events of Right/Left into Forward/Back in the TranslateInputEvent function. You didn’t show your TranslateInputEvent function so I can’t tell if you did it right.

But I can see there’s a mistake, KeyMappingName in EventSetups is used to reference a mapping in KeyMappings list, so it should be the name of one item on the list. Your KyeMappingName is “Move Right”, and the Name of your KeyMappings is “Forwards”. That’s certainly not correct. If you are still learning how to use this plug-in, I suggest you stay away from KeyMappings. It is not necessary to use it. It’s for input events of the same key mappings that have different input event types.

By the way, there is a space in your KeyMappingName. I am not sure if it’s valid for variables of Name type.

lol Thanks for getting back fast,
Yeah I am confused in what needs to be done in that function.
Looking into everything at the moment and cant find any details about this.
I got a Direction in character BP called Direction and it is a Name String.

I think this project is a little bit hard at the moment for me while i am learning C++ and Blueprints.
Getting the abilities and stuff is ok for me, But its the logic of more complex things, I found out how to make
The characters always face each other In a street fighter /MK type of style.

Have you got any other documentation on this apart from the website blog and also the Youtube videos?

Thanks Isatin

@jwyuen

I wanted to comment because I know a bit about fighting games.

You shouldn’t label your inputs as “forward” or “back” because “forward” will always be relative to your opponent. Everything should be labeled in a “left or right” notation.
The concept of “forward” and “back” is purely for player level understanding of the commands, that they switch depending on facing direction.

EDIT: I see you do have “Forward Left” and “Forward Right”, so that makes my above post irrelevant xD

Sorry for not providing doc for that, I was planning to make a tutorial video about that but I am quite busy with relocation and there are other videos with higher priority so I don’t think that it will come out soon.

What you need to do in that function is to return translated input events according to the situations in your concern, i.e., the facing of characters.

Let’s say we have two input events, Left and Right. What we have to do is translate them into Forward or Back in the function TranslateInputEvent. Provided that somehow we have a function named IsFacingRight returning whether the character is facing right. So when the input is **Right **we need to return **Forward **if IsFacingRight returns true and return Back otherwise like the following illustration:

How does this plugin handle move priority? Like if you’ve got a move with 23A and a super with 2323A. What happens if you input 2323A?

You have to handle that on your own.

Check out my Youtube channel and there is one video about making a combo. There is an example showing one way to do that.








My above issue is that, I have two characters being controlled by two players, one from keyboard and another from gamepad. When I use the characters they work on both, until the gamepad player 2 tries to do the inputs. They both are the same blueprint class. (AAA)

Yeah, I saw that now, thanks. Isn’t it better to use a struct for the input and montage? It’s easier because you can see the input and the animation at the same time and also you could have montage arrays for each state (jumping, crouching) and trigger them with the same input based on a state check.

Sure. But that’s not the point of the tutorial. To keep the video simple, I intentionally avoided mentioning Blueprint Struct.

In fact, I created an asset type of Move combining *AnimMontage *and InputCommand in my personal project of fighting game. So it’s very easy and intuitive to add a new move.