#blueprint
1 messages ยท Page 391 of 1
it is only useful if the same variable is read and write in the same execution flow, little nodes
Someone will really confused, if they see this node in my graph ๐
I also created one very useful Macro,
it can be used in Tick, and the output pins will only triggered once when the input is changed.
This is internal view of it ๐ค
Yes they are very powerful, but mastering them takes time
lmfao bro is re inventing the wheel the whole day ๐
ye its usefull haha
Yes i create crazy things, everyday, but some are out of people mind in here, they don't understand it ๐
Well if you want to dig a hole and you have a shovel you simply dont see the need for a new tool that looks a bit more fancy but does the exact same thing
It goes a bit against general coding practices of avoiding redundancy and overengineering
However compiling logic into macros is fine
yes some people don't know, how the shovel is used internally to dig a hole, and how the hole is dig ? ๐
I think everyone understands it. I wouldn't say it's anything complex or wild. The issue is that its entire function is dependent on being in the event graph. My use of the event graph is minimum so your idea isn't particularly useful for me, especially when the whole point is to just not create a named property.
I can also see this getting abused to the point where these are used to store the same data in multiple places. If I joined a project that used these I'd most likely remove them when ever I saw them. (After I spent 5 minutes figuring out what it's purpose is)
Requiring the event graph, having no name and not being searchable are big turn offs for me.
Wouldn't this still pass through the first output pin when being inserted in the logic? This seems to be the issue I am having, since there does not seem to be a way to set a return node.
I need it to not continue the logic until it's coming out of complete.
The first output pin will be called after the node has been triggered regardless of if it has finished loading or not. I don't tend to use it very often as the logic I want after should be done on the completed pin instead.
Having an issue ive got a object pooling system for my projectiles where i spawn them under the map then when i need them i get reference to the next available one. Set it to my guns transform then unhide it however no matter what i do it wont move
Ive added force and tried projectile movement component but it just sits there
I finally got around to this and, short version: it worked great! I did have to make a tiny adjustment to avoid ENgine error/warning messages tho (Property returned None). I gather they came up bc the Tick occurred a time or 2 before the camera variable was set. I had to set a tiny delay on the Begin Play sequence before setting the camera; otherwise it happens before the camera is active and sets the variable to None.
My final solution was a Boolean 'Ready' that's set to True after the Camera is set, and a Branch based on Ready at the top of Event Tick. it works, and no warnings pop up, but did you or anyone have any other thoughts on this?
ah ok. Well, that is the kind of info I was asking about.
I could look and see what the Validity checks return before and after the little delay, then possibly change the Begin Play sequence to include a Loop that ends once its valid.
Still, I imagine changing the Tick to use a variable instead of casting to the camera every time must save some CPU work, even in a game such as mine with rather low demands on power.
Once the Camera Variable is set to Player's Camera, the next node is to Set Ready to True
not really
It currently goes:
Begin Play:Delay 0.02 sec -> Set Camera -> Set Ready to True
Tick: Branch (Ready), False Path: Do nothing, True Path: Move object based on Camera Location.
A cast is almost free
so it really doesnt matter if you cast on tick
doing a isvalid check on a variable is minimally cheaper
but the difference is so small that it really doesnt matter
interesting. On the whole I wasn't too worried since my game won't need much power, but I like to learn about it just in case. I imagine my goal of No Slowdown will hold
I'll try that out.
I do want to be safe, even for a 2D game in the style seen on 16-bit consoles in the 90s
I understand that; the hope is that this way it distinctly waits for a Camera in hand before exiting the setup.
Well, yes and no. What happened when I didn't wait at all was that the object simply didn't move. It uses the player camera to determine it's own position; it's a 2D parallax background
So the game didn't crash, it just didn't get the parallax scrolling
I see.
For a while I was using a customized Material for the Parralax scrolling, and having the BGs as part of the Camera object, but when I tried to get different speeds, the math wasn't mathing, so I had to do like Scotty D suggested,
Hi engage
Hi everyone, I'm making an alien abduction prototype for school where you move an unconscious human in 3d space with a tractor beam. I have movement and rotation figured out, but I'm trying to figure out how to ragdoll the player character without losing control over it. Simply checking the box for 'simulate physics' on the character separates it from the controls. Does anyone have any suggestions on how to accomplish this?
when you ragdoll it physics takes over the movement of the mesh. Use a constraint to connect the mesh with the thing carrying it around (the ufo probably
Right now I'm using the controls in the BP_ThirdPersonCharacter actor, so that would ideally be the thing moving the mesh. It looks like the Third Person Character mesh already has a skeletal mesh with some constraints, though I'm not entirely sure if any of those would be appropriate (it doesn't look like it). Where would I add the constraint?
If what you want is to effectively be "walking but floppy" then just simulate all bones but the pelvis or whatever is the rootmost bone in the physics asset.
then the capsule will walk around, the rootmost bone of the mesh will come with it, and everything else will be all floppy
Set All Bodies Below Simulate Physics is what you're looking for
remember the CAPSULE of the character is what does the walking/flying/jumping, the mesh is just cosmetics
Okay. Just for reference, what I'm trying to achieve is a floppy floating character, similar to the human in this video:
https://www.youtube.com/watch?v=dWAERJhHL4w&pp=ygUXbGlmdGVkIHBpeGFyIHNob3J0IGZpbG0%3D
I have the flying part figured out.
Let me take a look at the skeleton and see which bone is the root...
It looks like the pelvis is the root bone
try set simulate on all below pelvis and see what happens
like this?
maybe not include self but sure, try it
testing...
success! I may need to select a slightly higher bone, but this is a great start
thank you!
There's also some blend modes where you can have the physics gradually take over as you get further from some bone
is that a node to be added to the character blueprint or something I need to configure in an asset somewhere?
just like this
set all bodies below blend weight or something like that
doesn't seem to be doing much so far. I've tried 0.5 and 1.0
Do I need to also simulate before this node?
Nevermind, I figured it out. You need to simulate physics then set blend weight afterwards:
thanks again!
Hey I tried to follow this and honestly I just really don't get it, with the code I have I don't feel like I'm able to translate it to anything like this, and if I can I'm too overwhlemed by doing it
The Actor Component can't run nodes I need related to stuff specifically inside the actor that happens during DOT or anything like that and I don't understand how I'd fix it without ending up in exactly the same situation
If I'm honest I feel really over my head and I don't know how I'm going to be able to make this system scalable like you all recommended and I think I'm just kinda stuck committing to the system I have
Do StateTree overrides apply to only the root tree or also any subtrees? For example could you nest overrides where you have a combat tree you override and then override stuff inside of that tree?
so im still new to programming and iv been stuck on fish for days now and this is what iv got so far but fish are clumped and not moving even if i just try 1 fish, ik this sloppy and wrong in spots any tips and help would be appreciated
i have swimspeed and direction set with values if thats what you mean, im self taught im sorry
got it thanks ill start digging lol
Seems overcomplicated. Set rotation could be moved to begin play since it appears you don't change it. The calculation of movement would look something like GetForward * MovementSpeed * delta. Also you should use the delta seconds from the tick because if you ever change the tick rate of this actor the tick times won't match with the global.
If the fish are pawns or characters you could use "get random location in bounding box" with AIMoveTo
Time counter looks like it could be a timer with somewhat randomized value. Set it in begin play to call an event to re-randomize direction.
That's understandable. It can be a lot to take in. Especially considering all the moving parts. Try sticking with it though, it'll click eventually.
When you say you can't call nodes inside the actor it's on, what would you want to call on it? It sounds like a job for event dispatchers. This allows the actor component to notify it's done something and then have whatever listening do something.
Anything to do with sprites I guess
I just feel like if I build all the effects in a component, it'll just end up with me back here running stuff in the actor at square one
Also it's been about 3 days of me trying to figure out things like this with different ways to make stuff happen outside the actor and every time it just makes me feel sick trying to understand it
ok thank you im gonna start reworking thanks for the help
I'm curious on this. Is this fish meant to do anything eventually besides just swim around and be visual?
no its just for looks maybe one day but now just looks
I would strongly advise you take a consideration at doing this in Niagara.
Make it a particle then
im guessing its better lol
you can setup component references on begin play, e.g. the actor initilizes your component with references to it's own components/or the component finds them itself by component class/tags. But sometimes you just have a harder time as you noticed, so it's not always a good idea to put behavior, which is very actor specific, into it's own component (imho)
It's much faster. For one of your BP Fish, you could have about a thousand niagara fish. Maybe more depending on level.
Performance wise I mean. And it's good to learn particles early on.
The amount of things beginners tend to brute force in code that should be done in a material or a particle hurts. But that's Youtube for you.
ill look into it im still learning as well but if its less headace for me im up for it lol
Check out uh...
there's a bunch of flock tutorials in Niagara on YT
I'm going to butcher his name.. Ghislain Gerdot?
I think he actually even made a really fucking awesome fish swimming little thing. Maybe too advanced, but he has a lot of neat stuff.
Playing some sort of sfx (such as your acid fizz sound) could be a feature of the stats component. It could be a definable property on the stat object base class that the component can read can play if set.
You can do similar thing for the sprite and colour. This can allow any stat to apply a temp sprite material and colour if defined.
i already saved it lol im looking into it now
Would you be okay to try and help me figure this out because I'm struggling to do it based on the videos and links people have been sending me and I'm not sure how to do it
A component behaves almost exactly like a actor
the component won't have a sprite in it
All it is is a backpack for code
You put code into this backpack and then you can give it to any actor
Every actor can now access the code in the component
But the component can't reference a component it doesn't have in it without casting or setting up references first, which you can't do without casting to the BP you want to effect which is the whole reason I'm trying to do it this way
Get owner - get component by class
there you go
I tried that and it didn't give me anything?
Youve put in the wrong component then
what do you mean
Try this
Create 2 components
Test 1
Test 2
Add them both to your player
Create a custom event in Test 1 and call it PrintTestString
PrintTestString - get owner - get component by class(test2) - get test string - print string
Open test 2 and create a string variable in there and call it test string
In your player on button press Q - drag in test1
Test1- PrintTestString
not just casting but a lot of stuff, currently I'm trying to make a status effect componenet that'd be applied to multiple actors
So do the above thing and you will instantly understand how components work
Create 2 components
Test 1
Test 2
Add them both to your player
Create a custom event in Test 1 and call it PrintTestString
PrintTestString - get owner - get component by class(test2) - get test string - print string
Open test 2 and create a string variable in there and call it test string
In your player on button press Q - drag in test1
Test1- PrintTestString
All my variables and events just come out as invalid
Send a screenshot of your graph and the error
I just deleted it to start over
I'm going to take a break, I'll have to come back later
i'll say it again.... components are nice and all, until you tie them to a very specific actor setup, then things get messy by definition
maybe a component isn't the correct tool for the job ๐คท
All my actors are going to have the same stuff inside of the actor
Enemys will all have the same stuff
they're gonna be children to a parent
First time ive read this lol
then they should likely have a common baseActor class which sets this up and implements the behavior
composition > inheritance ๐
no
yes
I've been told to make a component so I'm not copying and pasting code and making 30 variables for every status
implement it in the baseactor then, no need to add a component to two actors which inherit the same base class
But I'd still have to make all the variables every time
Thats the last thing you should do in bp ....
not if you add them to your base class
no like
Currently I have acid, lightning and fire
when I added fire
I copied t he acid code, duplicated the variables and renamed them one by one
Not in bp
This just feels like one of you likes apples and the other likes oranges
No
Its less a matter of taste and more a matter of will it break the entire project
and bp structs will
I've seen a lot of these kinds of conversations in multiple UE places and people always say "No this method is better" and when you look into them, they kinda just function the same with different pros and cons so it's up to you and how you prefer to make it
If you want to use structs so badly declare them in c++
Expose to bp
and then your good
By how much?
or treat them like C++ structs.... save everything, modify struct, save only struct, restart editor (this eliminates most of the breaking bugs, which are the fixup, not editing the struct itself)
anyways... i wouldn't start adding components for Fire/Acid/Poop damage
I'm so confused, what should I do then
A bit
i have no clue, because this also depends on your project
components are a object structs are not
so the struct will always be faster
no memory overhead
that's... questionable reasoning for giving recommendations ๐
as if that 1kb of overhead would be an issue here
That doesnt goes against what i said ?
https://www.youtube.com/watch?v=EM_HYqQdToE did you watch this?
Announce Post: https://forums.unrealengine.com/showthread.php?101051
This Training Stream takes a look at Blueprint Communication. We find that Unreal Developers of all levels can sometimes struggle through the concepts behind moving data between objects. So in this video we'll take a look at the different ways to make Blueprints talk to one an...
If the difference is significant is another story ๐
I can't remember I'm ngl
Everything I've been looking at regarding literally all of this has ended up just becoming a foggy mess with how much it's messed with my head
There is when you don't have just 1 enemy
I don't just want my goblins to get hurt
I want every enemy to get hurt
Yeah I know but that doesn't solve my "Creating 30 variables for every element by hand" problem
the thing is that the component is apparently supposed to sit on different actor classes, so what class is the parent even?!
yea but you are saying something that's only true in specific cases
no
BP_Enemy -> Contains the variables that you want every single Enemy to have.
BP_Goblin (Child of BP_Enemy) will contain the variables that are present in BP_Enemy.
BP_Ogre (Child of BP_Enemy) will contain the variables that are present in BP_Enemy and can have different logic/appearance/whatever from BP_Goblin.
and on top of that BP_Enemy could have the damage handling, and it would be covered for both classes (they could change the default value of your multipliers to have different responses, e.g. one is less affected by fire damage)
When you want to deal damage to a BP_Goblin or BP_Ogre, you should only ever need to cast to BP_Enemy as presumably, BP_Enemy would have the health logic as that would be something that would be shared between them.
and no need for any component
A health component is nice tho... ๐
Grandpa Programming
that still doesn't help with people earlier saying I need to make it so I'm not creating all my variables though
I'm making just the goblin for setting up everything at the moment, when I'm done setting the AI up (Which is literally almost done it's just these spell elements), I'm going to right click, create child, then make THAT the goblin
I was in the process of just setting up a lightning chain projectile earlier and then its ballooned into arguing over structs and componenets and I'm just getting a genuine headache lmao
I don't want it to come across like I don't want help or to be shown how to make my stuff better, but it's hard when I have people telling me to try different stuff, you know?
Resistances can be something defined as a Map variable of GameplayTag > Float.
The gameplay tag can be the definition of the types of resistance. Float can be the amount of resistance in %. You can populate the map with the resistances the object has.
When you do your damage calculation, you'd pass in the type of damage it is (as a gameplay tag) and FIND in the map the type, if it's present then you can reduce the damage based on the returned amount, otherwise, you do the amount of damage passed in.
2 aproaches
Inheritance - what ben says
You create 1 base class character NpcBase
In this base class you add all your variables and code that every npc should have
Then you create a child of that base class eg Goblin, it will inherit all variables and code from its parent NpcBase
Or composition
You create all this variables inside a component and then you add this component to your goblin
too bad that we can't make polls in this channel... ๐
All the variables will probably have to be in the base_enemy anyway because of a lot of reasons but currently what I want is just an easy way to "duplicate"/rename multiple variables easily, which apparently an actor component or strut will be able to do, so we'll see how that goes
i would combine everything.... make one component (which only depends on the base actor class, so that i can cast without thinking) put all damage vars in a struct like engage said, and put that as array on the component, so that it can handle all damage types
Read again what i wrote
Why would you need to copy any variables if they inherit everything from their parent ?
but that will likely come with a aspirin prescription at this point
A struct doesn't make that any easier. A component does, or inheritance does. A component is more modular as you can attach it to any actor and it can function similarly.
When I make a new element
You add this new element to the base class and all children get it
it does (they want different damage types, fire/acid/etc)
Currently I'm duplicating this code and all these variables (like, ctrl+C ctrl+V) then going in by hand, renaming the variables and replacing them in the duplicated nodes
So you create a base class or a component then you copy paste all this variables there
Done
pain.
THis is exactly what you should do
keep in mind this is a parent, currently it has no children but when I have figured out all my elements, it will be the parent
So all you have to do is right click it and create child
Yeah I know don't worry
I want to finish it first
If it's "set it and forget it" I probably can't use it because I will be changing stuff
We need a server badge ..... "struct lover"
Yeah I am sure it is perfect but given that I've never used them before and this is a complicated system for me right now I'm probably gonna leave it incase it breaks my game
yeah
Like it'd be great but I feel like taking the slow, monotonous route of duplicating it all and just setting types by hand is the least "This is going to kill everything" approach right now
all a struct really is is this panel seperated
Would I even have to plug anything in or could I just make a struct with all the variables and then duplicate it name it "Element_2_strut"and then just rename the variables then call the variables
a map?
gameplaytag!!!
you just successfully opened another can of worms, Maps, and whatever we prefer as key type ๐
I mentioned Gameplaytag > Float map earlier <_<;
A array with key
eg
Map string-int
String(key) Int(value)
Hello 1
World 5
Gameplay tags are for weaklings
Wanna take the easy shortcut huh ?
Thats how it is
Thats why your always better off with a uobject
its also way more convenient to use
In my opinion, if what you're working on right now, is trying to handle DoT effects without having to copy and paste tons of code.... I'd go for a "DoT Effect Component".
This component would be responsible for all things relating to when that effect is applied to a target. It can destroy itself when its timer runs out, it can handle the stacking logic. It can hold all the variables that define what the DoT is and how it works, and have the logic for sending damage to the target (resistances need not apply, that should be handled wherever your health is managed that the component would pass the logic to).
If your DoTs will all function exactly the same, only the values change, then you would need to define those values somewhere.... You can use something like a data table or data assets, and when spawning the component you would feed in the appropriate data table entry / data asset through an exposed variable.
If your DoTs need to have different logic in some way, then you'd create child classes and those child classes should also contain the different values of the DoTs. When spawning, you select the appropriate child class you want to apply and nothing further shoudl be required.
xD love how you throw more rocks at someone who is already confused
adding to this, to not add 20 new things to learn to the stack...
You could make one generic component which handles the damage, and inherit that component class to change the values (e.g. DamageBaseComponent introduces the logic and all variables for tweaking and childs like FireDamageComponent just change the values)
I took a step back and came back to try and use an actor component and it just doesn't inherit the components of the actor its tied to
no structs required, no data assets, inheritance and modular composition, you get the best from all worlds ๐
A component with components ?
Like I said earlier with sprites and stuff
a component doesn't inherit anything of the Actor it is attached to. It knows which Actor owns it. That's pretty much it for the component side.
It wouldn't. Components are separate objects that are attached to actors. You can get the owner of a component, (which would be the actor) and then get other components that actor may have.
The actor gets access to everything in the component
thats what its for
finally a fact we all can agree on ๐
this is getting so messy to try and make it "streamlined"
Effects are a difficult thing to do well imo <_<;
to think all I said this morning was "Hey how do I get actors in range to hit them with a lightning bolt" and this is where it ended up
like 12 hours ago
and I still don't have that lightning bolt :D
at least that's answered now
Ahh is that really such a good idea?
Better do a trace after each spell ๐
Someone explain how to do traces fast
๐
Mabe one could split the trace results and put them in a struct ๐
It is still not :(
I tried using a collision and getting overlapping actors but I only want to do it to a limited amount
and when I tried it, it just shot the bolts all to 1 actor then the overlap deleted itself
So I asked here and got told to use an array loop and sphere trace
then add actors to a loop
i've linked something else tho
If i have a actor with tick disabled will that get automatically propagated to all components ?
Or do i have to manually activate / deactivate tick on them
I was following what somebody on Reddit told me to do and they said it was correct but then said "No you're wrong" and never elaborated on what I did
I know that now
I've just never been told why despite following instructions
How would you add the actors to an array then???
You know what, no I don't want to figure that out now
You could put an array in a struct hmm
the issue in your code is likely that you always compare the same distances
as you overwrite the "1st element" object every loop iteration
How would I only make it do it a limited amount of times
So you would have a component that handles incoming dmg Ac_Stats or Ac_Combat
branch on array index < 5 if you want to limit it to 5 actors (and eventually break the for loop to abort it early)
@dark meadow For how long are you working in Unreal already ?
Well I'm currently getting it working first and then gonna see how many feels "right" because it's not gonna be reliant on the player
The chain effect happens when the enemy hits a certain amount of electrified stacks
If that enemy is also electrified, but that's already coded
Basically lets say you electrify 1 enemy
It then shoots... 3 bolts out
if 1 of those is also electrified
he also shoots 3
Since 2017 but mostly just basic stuff and I haven't done anything since like 2021? because it was for college prototyping and everytime I wanted to do something complicated they said I didn't have the time
Then when I started trying to learn more complicated stuff, it's made me feel really overwhelmed and confused and I basically just give up, and I've promised myself I won't give up this time
Yeah I have the lightning bolt
You can see the bar indicating how "electric" he is
i think you should focus on one thing for now, either refactoring existing code to scale better with different damage types, or do the lightning thing
Originally I was going to redo the code then do the lightning but I really don't wanna mess with all that now
For the future, maybe
But the code is done in the enemy now and moving it all and remaking it and figuring it out with system designed another way is gonna drive me off the deep end
Yeah now I know Components and Scructs exist, in the future, yeah
Yes
YEah
oops
I forgot you sent it, let me read it but I'm also curious what Engage would suggest
the lightning?
Oh I want it to chain off the enemy though?
yeah
the logic is just flawed
Okay, Engage I wanna see how you'd do it, but trying with sphere overlap, this is what i have?
I'm not sure what my next step is
let's assume the actor variable has a sane name ClosestActor
1.) you set it nothing
2.) you get all sphere overlapping actors
3.) you loop over them and do a branch on ClosestActor->IsValid => NOT Boolean => OR <= Distance(PlayerActor, CurrentActor) < Distance(ClosestActor, CurrentActor) and THEN you set ClosestActor to CurrentActor
if you want multiple closest actors it get's a little more complicated
How do you mean sorry?
lets say 3 for now
okay
how come i want to pass myself as the target?
The enemy isthe start point
it's nice to know how far the closest enemy is away....
This is how I want it to do it, the wizard isn't relevant to the following projectiles
idk why that image has so much blank space
No I want it to zap a limited amount otherwise it'd be too powerful I think
Oh what would the difference be if it was a chain, in your mind?
cuz I've just thought the way I wanna do it is actually similar to another spell effect i have
This is basically a small explosion
it baffles me to this day that there's no method for that in BP
it's one line in cpp...
wait no I wanna stick to your original method of chaining like you originally did
how are you setting an actor out of the event?
With the "Inputs"?
Also my enemies all have a tag for "Enemy" should I use that in a branch at all so it doesn't get random other actors
In your branch should I put it as an "and" on the return condition
Would that be unneeded?
xD
this gets wilder by the minute...
it's totally unnecessary, because the array is also empty at this point
Okay I'll remove it
and idk what you do you ActorHasTag check on, likely from the Event input, which is likely already supposed to be an enemy
if your enemy base class is unique to enemies use that as Class Filter
no need to check for tags
oh god, what is the index for?
don't tell me you assume that the method gives you a predicted order during multiple calls
E touch
I'm struggling with colours???? not my concern right now
@last peak say something
at least one person here must see that this is going against a wall
Historical moment
๐คท I just come in here every 15 - 30 minutes to laugh ๐
i'll have to check back tomorrow, if you guys get this to work in the next 12 hours i'm going to question everything (again)
Isnt that super op ?
We're gonna cap it
Also I'm debating making it so every time it chains it takes magic resource off the player regardless
how the heck are you not done yet tho ? XD
until the index is set by one iteration and no one will be ever zapped again because it's still blocking
Isnt this entire thing something you do in 3 minutes
Maybe for you :(
But yes I have this target set
I'm just being slow because my meds have worn off <3
Tbf I use a UE pastebin
Yep
I assume you know this one
https://blueprintue.com/
Pasting it crashed my UE4 uh oh
Fortunately, I clicked save at some point today
I have it set to save whe n Iclick compile too
When I pasted it
I think I had a memory issue or something tbf because I was getting some FPS issues too
Maybe it's just been running too long and wanted to die
(relatable)
Yeah I mean it worked the second time, it just didn't have the pins connected
So I'm putting it together
but I have the nodes
Like look at this???
Like save backup or "backup the project"
But wouldn't it be REALLY funny if I ran the code and it did go wrong
I'm kidding dw I'll look after it
4.27, dw though I've got it together
uuuh pawns or characters lemme check
Character
I dont think character is an option
We'll see if pawn works
For some reason it's failing to compile with "Set actors to ignore"
it says it needs an input
E
Cool
Also at the end, should that be when I check if the actor has enemy tag?
Should the target be the array element or zap from
Cool
Thank
Ok so thats all set up, I need to do the lightning shoot now right?
I think so
This is the thing with loops and arrays
I kinda get it but not enough to make them myself
Basically if the index (Amount of shots?) is 0, it stops looking for actors and empties the array so it doesn't use them next time
The loop is getting all the actors in X radius using the "Zap from"?
Yeah
Yeah, it all makes sense I think
Not perfectly but I understand what it's doing
Okay cool
I sure do
btw I can show you the code for my lighting and you can see if you can use it
the cube is what does the overlap and "hits" the enemy because I couldn't figure out a better way of sorting it out
Left click, spawn actor basically
And it's getting it's "start" and "end" from the player spawning it
Well, Aim not end
Yeah cuz it's getting it from the player's line trace
yes
So basically it needs to be given it's starting point (actor location, where it's spawned anyway) and the end location
Probably...
Target enemy, I just put Zap in to make sure I knew which element it was part of
My "Target Zap Enemy" is this
here
Want me to upload my BP to the pastebin?
Should be done
Not sure how I set aim before I spawn it
I've just put target zap enemy in the end
I had something wrong in there, I think I misclicked at some point
A
Here goes
hm
Did I forget to put stuff in
As in the enemy I shoot, not the chain?
Thats itself
Should I change the index
Okay
I don't think it's working
Ok so it is spawning but its not hitting anything?
hang on
I can't physically see it but the print string inside of it comes up
Like it spawns a lot of it
Oh wait it's on that 1 guy under the rock look
He's blasting himself
oh
I thought we said it'd go on the enemy, my mistake
Because of how it's fired it kinda needed to be on him
I can put it in the projectile to tell the goblin he's been hit by lightning
then turn it off after a couple seconds
Like a custom event in the goblin the lightning triggers
Okay. That sounds easy enough
I do need to quickly say, it is half 1 in the morning for me and I hugely appreciate all your help, but would you be ok if I sent you a DM and you help me with this when you're free?
I'll DM you now if thats ok
and then message you when I'm working on it again?
Thanks so much
Hi guys, Iโm having trouble implementing pixel-perfect panning for an orthographic camera in a 2D game (no character).
Also, I change the OrthoWidth for zoom using the mouse scroll wheel, so I need to account for that.
UE 5.7
I discovered that an OrthoWidth of 1080(camera settings) perfectly matches the mouse position with the scene while panning. It works perfectly when the window width is โฅ 1080 in standalone mode. However, when I reduce the window width to something smaller than 1080, the panning starts to desynchronize. I suspect this might be related to my hardcoded OrthoWidth division or the DPI Scale curve (because 1080 is 1 there). I donโt want to disable DPI scaling ofc, and even if I do, it breaks again. What am I missing?
can you use soft ref for this data table?
just soft ref the content inside the data table.
e.g the Textures, skeletal mesh, etc.
Assuming I'm understanding you correctly, you'd need to calculate the relative pixel size based on the original and scale the movement amount by this.
So if the default is 1000 and it changes to 900 (zoomed in), then you'd pan 10% less. (0.1) And pan more when zoomed out.
Generally the ortho width would need to match the X resolution for pixel perfect so setting an arbitrary default of 1080 wouldn't handle different screen resolutions.
dumbest thing ever
its not showing the custom cursor, the default one is still showing...
How can I make the rotation stop after 2 seconds and make changes to its speed during said time?
Depends on how you want to affect the speed. If you can hard code the speed change, a Timeline sounds like what you're after.
So like a set timer?
I don't recall where, but you need to make sure you're not forcing hardware cursors.
A simple slowing down the rotation then stopping completely, sorry if it sounds stupid I just started with unreal
Not quite. A Timer is just a callback after n seconds. A Timeline is a helper that essentially ticks each frame but with a curve output you can use every frame to do something over a specific time frame. Like a 2 second track that changes speed over it's lifetime.
hmm
Never had this issue before, simplest thing...
I guess, like "world units per pixel" or something, well it depends on what output gives the GetMousePositionOnViewport function, I don't have a clue tbh. "an arbitrary default of 1080 wouldn't handle different screen resolutions" - but it does already, I tested in the standalone mode, all the resolutions above ~1080p up to 1440p work perfectly fine, somehow... with this setup. Basically, I need Google Maps style controls, to be clear.
Thanks, tho I watched a video about timelines and it will be a huge help in the project I'm working on
I'll get there eventually, so far I'm doing simple timeline nodes. Will probably have more complicated stuff through the next years

When simulating in the editor, does a game state get created for the simulation?
I believe it does.
if a cast to node fails a cast will it continue down the code line somehow?
it'll trigger the failed pin instead.
hmm okau
What's the cleanest way in BP to do a two-way integer mapping so like, inputs [0, 1, 2, 3] map to outputs [0, 1, 3, 4] and it's reversible ideally
(This probably seems like an insane thing to want to do, but it's just one asset I'm using has 5 material quality levels but overall scalability settings for the project are standardized at 4 quality levels. I don't want to trim out either the best-looking or best-performance option, so I'm killing the second-worst quality level)
This sounds more like you want to just use 0,1,2,3, and correctly set up your scalability ini.
You can affect what settings go into what level. Rather than doing this. Just move 3 and 4's settings down one index.
DefaultScalability.ini
Exceeeeeppt I dont think this pack even looks at that INI
Pack?
Yeah the asset pack I'm working with here. It's like... space creator or something like that.
I'm not fully following. What does a specific asset have to do with your scalability settings?
Hey peeps, I'm having a major reoccuring issue with my project that I can't seem to resolve. This error is preventing me from packaging the game currently. This is a 5.7 project upgraded from 5.5-5.6 - I think its todo with circular dependancies of some sort, but I've done a lot of BP and I haven't run this issue in previous versions of the engine. Is there something I'm missing to resolve this issue or is there a way to more clearly debug the issue?
I've attempted a bunch of refactoring into interfaces, getting rid of direct class references as variable types etc, reparenting the actor component to a new c++ class, and clearing saved/intermediate to hopefully force the property list to update, no dice so far.
Looks like a race condition. Can you show your asset's reference viewer?
i would check if you can enable more verbose debugging through packaging, so that it tells which object it is working on
i feel like they might not know which asset it is
nvm
yeah thats the problem, I can see there are things referencing and being referenced by but stripping out variable types doesnt seem to remove the issue, I have some casts, would that still cause issue on compile?
casts at least create a reference, yea
Is there a way to cast to my character class inside the game state class. or should i go a diffrent route about this.
lemme give it a try stripping it completely
BP_UnitBase
RPG_EncounterManager_AC
Both of these need to only have a one way reference to this thing. Either being used, or using. Not both.
You need more context for this? Singleplayer, or multiplayer?
multiplayer
What is the context? Why do you need to get a character?
Thanks for the prompt responses both, I'll check it out ๐
Good luck! ๐
i need to get a ref to if the player is dead or not. and if so continue with respawning only after the round has ended. right now I have the logic for rounds in the game state
But which player? Or all of them? Like wait until every player is dead, then start new round? Or
sorta like cod zombies. so if any player is dead. they spawn as a spectator. but after the round is ended it will check and see if any players are dead and then respawn them
if all are dead then game ends
Ah. Okay. So... You essentially want to just get the PlayerArray, which exists on the GameState. Iterate over it. These are PlayerStates. You'll call GetPawn on them, and cast it to your Character type. Then you can check if they're dead, if yes, respawn.
okay. lemme try hooking this up. so player array > For each loop > get pawn > cast to char BP > check if dead > Respawn?
I think so. Though one curiosity is the spectator part. How are you making them spectators?
a BP class that spawns on a socket at the player its a seperate class in itself
Test out the above and start from there. It'll at least work on the still alive players. And if the cast fails, you know that the player doesn't have that pawn and needs to be respawned. If the cast succeeds on all then you can just run whatever respawn logic you have already.
copy. looks to have respawned the player just need to add logic for where the player spawns and reenable input. thanks for the help!
ok I removed the references in the encounter manager and other places, but still popping up with the error?
Hmm. Can you do he thing with the sliders in the top left and check further out in the tree? Cause this might not now, but something it references might reference a parent or grandparent that references it.
This pop up text works great, but the principles used feel wrong. Does anyone see a real issue with this? It's casting to a widget for every pop up. Not really adding it to viewport though?
A timeline is being used for the duration and then destroying
This is how it's spawned
I did make a modification so it also casts to the player BP every time also.
I modified it for color, etc.
It's facing the right direction always, it looks great, and I didn't notice any FPS issues. Just wondering.
If it works, go for it. But... This is EXTREMELY heavy for just some floating damage numbers. If you can limit this to like 10-15, I would. and pool them if possible. Globally, not per character.
It's not separating them out like the digit system for niagara if that's what you mean. I modified it for text not just numbers so I can format and feed a number as text. That way Evade, Miss, Resist etc can be sent also.
I could bind it to a variable, but it's just using the full text return
And this time it's NOT a broom! It's a pitch fork
That's why it needs the player cast. I guess an interface or someething might sub on that. Seemed like a reference to the instance wouldn't really be any better?
It just comes down to numbers. I'd have a heart attack if I saw a game I was working on do this. ๐ Like conceptually it's not bad, but we had a similar setup for Red Solstice 2 before consoles. It's very expensive to spawn and create widgets for something as common as a damage application.
One example is our grenade. Hits 20 monsters, and you get a frame spike on an older console because some people just like to play on calculators. And the widget spawning alone for us on that console was baaaaad. You're spawning a full actor with components and a widget.
Or maybe I'm missing something on the tags, since they are somewhat global. The 3rd person BP is used to store the "hit color" then the UMG widget just pulls it.
It has nothing to do with the cast or anything like that. It's purely the idea of creating an actor/widget every time something takes damage.
hmm having a look.. I think the main one is the RPG_EncounterManager Component attached to the player controller which im using for all my turn based encounter logic. It passes around references to BP_Unit_Base a lot... but im not sure if thats it this error has recently popped back up and thats been in there since the beginning. - I'm not sure if its worth refactoring anyways, whether passing around references to the character BPs is something I should avoid.
That's the main reason behind the concern. That just seems like a potentially bad practice or highly consuming. However, in most cases I don't think it would really be that many. Maybe 10 tops in most worst examples, but that's also on player behavior.
Realistically. The only honest way to make this performant is by maintaining a plain data array of the things that needs drawn, and animating them with map in screen space based on projection math. And it's really hard to make performant without C++.
In Atre, I wrote a widget and a subsystem that basically has a simple struct array, and the widget paints them each frame after solving their location. No creation, no slate prepass, and damage application gets a shorter callstack because it's only adding simple data to the array. We could probably have a thousand damage numbers on screen and never notice an issue.
Hmm. Uncertain without knowledge of the project. Most times you'd solve this by just making a C++ parent with some pass through functions if you wanted to quick fix it. So that things could cast to that instead of the BP.
I'm not honestly sure how pure BP people generally solve this without some wildly careful planning.
In theory... You could make a parent of something that has no casts, no references. A pure function caller that takes no BP types, pass actors as AActor instead of the specific BP and then in the child of that, you can cast to the thing you need. Then make things call functions on that parent, that'd break your chain most likely.
yeah I've done a fair bit of blueprinting previously but never ran into this as an issue, im wondering if maybe newer versions of unreal are just a bit stricter about how it checks for bp circular dependencies.
You mean making a parent of the Unit_Base character class and passing that around? and switching the direct refs in the manager to actor?
Correct. Just somewhere to break the link of references so it's not circular.
Why does it need a reference to the player to determine the color? That's a bit odd. The widget should either be told what the color is when its created, or have some better place to retrieve the color values from that isn't the player, like a data asset or from a save game or something if you want to allow the player to change the values.
I follow what you are saying, but I think I'm one link away from implementing it. I could expose the variable and have the color sent on the creation of the damage blueprint. However, that's not where the color is created. That blueprint calls the UI damage text widget.
UI Damage text widget is what's actually setting it here
You'd feed it in similar to what you're doing with the Pop Up Text, and have it instead call a function with an input of the gameplay tag and then run your switch statement in there based on the input value.
The main point is, you shouldn't be storing the color on the player character. The widget should store its own reference of what color, but the color can be decided on whatever decided to spawn the indicator.
You should avoid using the property bindings in widgets. These are called each tick.
For both the text and colour, create a setter function that you can pass the data and apply it once.
I understand the principles and reasoning for both those responses thanks. I'm just trying to translate it to the actual nodes and where they belong.
Did i hear bindings in widgets?
I think I figured it out. This was a template I used btw so I didn't originally create all these nodes. Just customizing it. This is actually passing the direction needed (assigning the value to the widget from the cast). So yes I think I can do that with the color.
Hey all ! Can I read a Texture (Render Target) from Blueprint ? I want to spawn particles based on a Render Target location
Yes @odd kiln
In my Render Target I have a "white trail" when my player is moving, and I want to spawn particles when and where the white is
Maybe you know how ?
Read Render Target Pixel
But, using a render target to decide that may not be the best option performance wise.
But how can I do you think ? Do you have an idea ?
I write and store my player location into a Render Target via Niagara
I'm trying to spawn particles from Niagara directly based on this Render Target where the white parts are but can't find how
I tried "Sample Texture" module etc but it's not working
Why not just tell the niagara system where to spawn them specifically based on data from the player?
I think this will do
It's not just "where" but also "when". When my player is "intersecting" a specific mesh based on position, a white trail is drawn on this render target, and, I want to spawn (burst) some particles at this location
Look that's my module in Niagara
I'm trying to tell, where the Alpha channel of my Render Target (Sample Texture 2D) is greater than "0" (means it's not black), set the particles "alive"
But it's not working properly
For the "position" I'm just trying the "Simulation Position" for now, but in the end I want to spawn them in the position of the Render Target, but convert it from UV Space to World Space ofc
I'm not really a vfx guy... From a programming standpoint though, the render target would presumably need to be updated every frame... You wouldn't want to read the pixels of that render target every frame either.
You could potentially use the render target as a mask for a material using some material math so that it only shows particles within those areas, but... I'm also not much of a material guy.... I just know its possible to do something like that.
What should this input be? Just a game play tag?
Ok thanks I will try to dig into it
yea
Then translate it on the BP damage text?
Filling out the color options, but I think it's working
The color is passed to the UMG widget. How do I get around not assining it or binding though?
That sounds like it requires C++ coding?
Click the little backwards arrow to remove the binding. In your widgets Construct event, get your TXT widget reference, then do a "Set Color and Opacity" and feed it your variable.
Will this work also?
I wouldn't on account that pre construct happens before runtime... Shouldn't really have the animation on there either. For the animation, I'd use Construct... For the color you can use Initialized or Construct.
Not sure what I am looking for
If you don't see TXT as a variable you can drag into the graph, go back to the designer, select the TXT object in your widget design, and at the top right there'll be a checkbox for declaring it as a variable.
Once you have it as a variable you can then connect it to the target pin on this node.
I did have to set it as a variable in the editor.
Is that for the color only or should it also do the actual number/text?
In other words should the text be set in the construct also
If you want to avoid bindings, then yes, you would do that for the text as well.
You'd need the node "Set Text"
Is there a simple way to grab it?
Drag off from "TXT Damage" and type "Set Text" (it may be SetText)
That should do it. Thanks
It does make sense. No point in grabbing the value every frame when it's not changing.
Precisely ๐
Just learn cpp then wtf XD
Hello friends, I have a small question about using audio2face in Unreal. I've been researching and looking for ways to achieve this for a couple of weeks now, and so far I've been able to use .wav files with UNREAL's audio2face plugin, but I need to make it โLipsync,โ that is, almost have a conversation, but I still can't automate that part. Any advice?
150 Font, the most under used tool in Unreal.
I'm looking into this, but does this seem right for a font change?
The font object needs to be set, but that is it! In font outline settings helps match the original. It brings a nice border to the text.
I wanted to test having the enemy hits a smaller font size to help distinguish
Exactly. I ended up going to sleep so I've only just saw your other messages. Glad you sorted it.
I tend to make functions for this type of stuff. Something like an init function I can pass the relevant values, usually when I first create the widget. It can be useful if you ever plan to reuse widgets and update its data.
You can get the font settings from the text box and then use set member. This can prevent you needing to provide all the other properties.
Is there anyway to enable EditLayer for landscapes after creation in UE5.7?
It's worked out, but turned more into a game design issue. I was originally having 3 colors for a player hit. Since it's an action/skill based game it doesn't feel as fair to just "miss" due to a dice roll. So it works by 100% on first chance 80% on second or just defaults to 60% dmg. The color indicated which roll was used.
I think I'm moving away from that to a more element based color distinction. Physical/Earth brown. Fire red. Ice blue. Heal/poison green. I'm just not sure how to indicate which tier hit was used or if it will. You can tell by the lower dmg rolls, but that's if you fully undertand the system.
Hey I'm stuck on a corrupted node, whenever I select the node it crashes the whole engine. Anyway I can delete it without selecting it?
I found a solution, by selecting multiple nodes I can select the corrupted node and kill it.
Hi,
I'm working on SmartObject and I'm wondering if anyone has any ideas on how I can pass or get the parameters value set in the SmartObjectDefinition to the GameplayBehavior.
Is this possible, or should those parameters be used for something else?
Can anyone help with why this wouldn't add instances to the ISM? its a Dataprep operation.
Creates a blank actor and adds an ISM component to it, sets that ISM as a variable and adds a static mesh to the ISM from a variable. Then with the loop it grabs the transforms of filtered meshes and adds instances to the ISM. the print strings all work, the transforms are printed correctly, the add instance return value is printed correctly but the ISM itself does not populate other than 1 static mesh at 0,0,0
on a side note the actor name variable also doesnt work, it just always gets named Actor0 or Actor1 etc
would this be the right way of getting the bone's local rotation velocity?
I'm tryna make the box trace have it's half size adapted to the moving speed of the bone
so there wouldn't be moments where the trace would just pass through the object when sweeping without hitting it due to the framerate
No, it just gets its current rotation. You probably need this.
ah, I see
thanks ๐
but I still have to take into account the bone's local angle when pulling out the individual axis, right?
or bone's roll angle
It depends what you're trying to do.
so, if this bone's local Z rotation is this way, and I want to adapt the box trace's half size that is oriented towards the bone's rotation, I pull out the Z axis?
or I focus on this gizmo?
It doesn't sound like you want the angular velocity, just the current rotation in world space.
Basically just want to stretch out the box trace depending on how fast the bone rotates globally on its local axis
So the trace will allways hit the target no matter how fast it moves
why do you need a trace to hit the bone in the first place?
the bone position is known so i don't see the reason to trace at all ๐ค
it's for a fighting game
take swinging polearms
they're thin, and can be troublesome if they move too fast
cause the trace that follows the trajectory will miss the target on the next frame
use normal physics collision (with CCD when necessary)!?
it's not that straightforward...
plus that I actually tried using box collisions as a simpler alternative before the traces
and there was no hit result if the box collision would follow the transform of a bone
well, it should be a physics asset on the skeletal mesh to begin with
When you perform an attack you'd want to keep track of the previous locations for the relevant leg bones and then perform traces from the previous to current locations.
Assuming you're keep track of two bones (knee and ankle) you can also perform supplementary traces in between to fill the space.
pretty much what I'm doing now
so a bone transform with RTS Parent Bone Space is what I need?
I just need to make sure that the half size of the trace extends accordingly to where the bone is rotating towards
From your description you'd doing something different.
As for the location, you'd need it in world space for the trace.
this is what I'm doing
This is the sort of thing i'm referring too. (Not the frame stable portion) No rotations needed.
https://bsky.app/profile/mpattym.bsky.social/post/3lhvokbl4pc2l
So what I thought would be a quick project turned into something that took far longer. So here's what I've been working on.
In short, it's a 'frame stable' weapon trace system. I would have liked to have implemented a hybrid approach but 5 days later it's time to move on. ๐
and here's where previous angle is
I think I'm actually doing it right
testing the blueprint seems to actually give me what I need
or not...
nvm, I'll figure this one out
You're over complicating it.
so do I not use the angle?
No, just locations.
Do a trace from the previous to current location for the ankle bone (in world space). This will give a sweeping effect and should give better results.
Once that works, do the same for the knee bone. When that works. You can look at doing supplementary traces in between.
For the in between locations you can just lerp between the sets of locations.
does it require baking?
I don't believe so.
rightyo
thanks for help
For the frame stable portion i did bake the data.
try rInterptoConstant node
if you want accurate data based on animation, imo the only way is to bake the data.
otherwise there isn't any info you can give to provide pin point accuracy when fps is low.
by baking the data (which are just a record of socket locations, frame sliced from animation), you can get near perfect trace.
honestly on blueprint only project, I don't know how anyone can tackle this issue.
Might want to look at some plugins in the marketplace if there's any.
Just ignore any who wants to play at less than 30 fps. ๐ I do often wonder if its worth the effort.
that's actually not an option. You see the animation in my video is not even fast.
yet even 60 fps still break the game, the slice were way too little it's not even curved on 60 fps.
and for even faster sword attack, even 140 fps ain't good enough.
well I guess I am making somewhat a fast paced game.
@dark drum my test with 100 fps, only manage to get 5 slices (ticks).
imagine 60 fps ๐
Odd, to me it looks like there was something else causing the issue.
the code for that test was simply trace on tick. Last position and current position.
Very odd, that what I did in the video I shared above with the default trace. Traces were capped at the fps of the animation.
the sword anim is probably 0.3 second long. The window of the trace is probably 0.15 to 0.2. Even with high FPS, not much window.
Yeah traces are capped here too, so the shorter the animation the more cooked going without baking data will do, imo.
Ahh that makes sense. If an anim only has 15 frames total and you only trace for 5 of them it'll look choppy.
there's just soo many ways to break this too. I was using Dyanmic Combat System from the marketplace.
I was wondering why when I alt tab and get low FPS.
boss attack literary not registering.
turns out how the trace is just checking the delta on tick.
it was a wake up call to shallow the pill and make my own.
What you mean they only load if you open the game graphics menu? Like, they aren't applied to the game without that?
If so, are you actively loading them somewhere outside the widget and actually applying them when the game starts?
The built-in settings (vsync etc.) are handled in C++, so they usually auto-load and apply.
Well, again, you gotta make sure you apply your settings to whatever they are for when you Save and when the game starts/boots.
Idk where the Brightness value is ultimately used, but you need to apply the value to that thing in e.g. your GameInstance's Init function (or similar).
And then also when saving fwiw
quick question on navigation mesh stuff: if I'm making a game with Pikmin-style bridge construction (predefined bridge locations, ai agents need to navigate over the partially-constructed bridge to add pieces to it in order to complete it) then what would be the best way to go about navmeshing for that? should I just use a dynamic navmesh or can I use something to regenerate the mesh only in the area around the bridge?
Hi, If i have a Enum with 4 indexes can i increment them by 1 without doing sphagetti code somehow ?
Enums are just bytes, you can convert to byte, add 1, then convert back to the enum. but you'll need code to ensure the index wraps around based on the number of members in the enum, there's a node for getting that number
I'm in UE4 so I can't use AIS but how would I set up a "Hold down" input?
Like, while holding down it can repeat 1 thing instead of spam clicking
Start a timer on press. Stop timer on release.
Good call
As an FYI, Enhanced inputs is available in the last version of UE4. It's an experiment plugin you can enable. It just became the default in UE5.
Trying to use the common list view. The Add Item function keeps adding the CDO rather than the widget being passed in, so changes made in the constructor are set to default...???
Update: it seems when calling "add item" the function ignores the subclass of the object being passed in, casting the widget to its parent class and therefore calling the wrong functions to set it up
Update 2: actually that wasn't the issue. What I'm doing:
- create a widget, passing in parameters as necessary
- adding the widget to the list view
- observing in the widget reflector that hte parameters passed in are not set in the viewed widget
update 3: was using user list entry, not user object list entry, as the interface so it was missing the list item object set function
You don't pass widgets to a listview.
I just now realized that, I should be passing the object which contains the info I want displayed in the list view item
Correct. ๐ That trips a lot of people up.
If I have an array of integer numbers (4,2,1,4) and I want to play them as audio beeps.
Each value in the array is the number of beeps. So beep,beep,beep,beep (with 0.5s) between them. Then between each array index to wait 1s.
How do I do this in BP? I wrote some logic but it doesn't seem to honour the delay function as I'd expect. I am instead getting all beeps play at one singular time. Would love some help on this. Come from a lot of GSC game scripting, pretty new to BP scripting.
I am making a mumble voice system that uses syllables in each word to make little sounds for the characters in my game. Here's the simple logic so far... gone down a real rabbit hole and got the code more and more wrong to the point I am just completely gone. I am sure this code is completely wrong, I need to get some sleep and come back with a fresh mind, but yeah some help to why I can't get delays to work or if I am doing something obviously wrong. I'd super appreciate any help.
Delays don't work in the built-in loop macros as the logic within them basically skips to the next iteration if there's anything that holds them up.
You can take a look at how a foreach or a for loop works by double clicking on them, and then you could create your own macro and insert a delay in them before the next iteration. Attached in the first image is what it looks like near the end of the macro in a foreach loop. The second image is a modified one that can be delayed with the delay's input being defined as an input to the macro.
I just did exactly this
trouble now is the new macro cannot be found :/
If you created it within an actor, then it'll only be available to that actor and any subclasses of it.
What as the base object?
parent class should probably be Object
That'll make it available basically anywhere
Also, your delay is in the wrong spot.... It'll still behave the same other than the first iteration which will be delayed.
Actually.... it needs to be Actor... Object can't use delay
My eyes are burning it is 3am I might need to revisit this tomorrow ๐คฃ but tysm
do I need to remake the bp from the content browser?
Probably, yea
got it somewhat working, thank you @dawn gazelle
it works but needs some serious clean up ๐
@dawn gazelle
Now I can create a table of dialogue for our characters and use their syllabl count to make a voice system, now to add some emotional stresses/pitch/variation etc
Just decrease in the delay. Use concurrency on the audio file so only 1 can be active. hehe
top left shows what text that maps to
wont that cut off ones then? or would that overwrite newest first?
I am not offended by the overlap here tbh
stuck that into a macro too and now I can call voicelines with 1 macro and a voiceline name
Hello. I was wondering about adding the Struct Utils to my project because of the instanced structs. I have items and want to have well structured category data for like Furniture, Food etc without having multiple queries from data tables nor a ton of data assets for simple items.
The question is, are there any problems with the plugin or is it stable enough?
5.4 above instanced struct isn't even a plugin anymore iirc.
it become a module.
used widely, it's awesome. Not sure if that's got much to do with querying data table though,
it's basically a struct that support polymorphism.
can you also adjust them at runtime?
In 5.6 it is still a plugin marked with experimental, that is why I was asking. Thanks for the info though
I'm on 5.5 and already getting the deprecated warning about struct utils becoming a module iirc.
like yeah the plugin exist, but it's deep in the module too now and i have to pretty much remove the plugin and use the module one instead from memory.,
Oh, I see, that makes sense
the types can be changed yeah.
It's like you can have a struct that can be of any type. So you get the drop down to pick any struct you like.
For usage, you just cast that struct to the correct type.
Which sounds perfect for my use case. I have a tag for what type the item is, being able to have optional data in the same place instead of several data tables sound great
instanced struct is awesome for items.
You have an array of instanced struct and you can just populate it with any custom struct.
For example, IconStruct, DescriptionStruct, VisualStruct, etc etc.
In your widget, you just check the item. If it have IconStruct then extract from the struct and display Icon, if it has descriptionStruct then set text, etc.
this makes the whole design very modular.
if you want an item that doesn't have IconStruct, simply don't have an icon struct in the array.
Meanwhile without Instanced struct, people are stuck with ONE whole BLOATED types.
like the classic FInferiorStruct would need to have EVERYTHING an item need and beyond.
Picture an item that give buff.
some items may not need to give buff, so you simply don't add BuffFragmentStruct to the item that doesn't have the ability to give buff.
how it look like in action.
In my case I want to have a main Item place for all possible items with minimal data - since this will be used for the simplest functionality of the item laying on the ground.
But then I have containers and furniture that need some more data and it was already annoying having to retype the same name in the second datatable. Everytime I have to type an identifying name twice, a flag is raised in my mind lol
That looks interesting. So i assume the fragment is just an instance struct array.
USTRUCT(BlueprintType)
struct FInv_InBackpack : public FInv_ItemFragment
{
GENERATED_BODY()
public:
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Inventory", NotReplicated)
int32 IndexInBackpack = -1;
};
USTRUCT(BlueprintType)
struct FInv_ItemID : public FInv_ItemFragment
{
GENERATED_BODY()
UPROPERTY(BlueprintReadOnly, EditAnywhere, Category = "Inventory")
FGuid ItemID;
};
USTRUCT(BlueprintType)
struct FInv_ItemStackableFragment : public FInv_ItemFragment
{
GENERATED_BODY()
public:
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Inventory")
int32 MaxStackSize = 1;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Inventory")
int32 StackCount = 1;
void SetStackCount(int NewStackCount) { StackCount = NewStackCount; }
};
USTRUCT(BlueprintType)
struct FInv_IconFragment : public FInv_ItemFragment
{
GENERATED_BODY()
public:
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Inventory")
TSoftObjectPtr<UTexture2D> Icon;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Inventory")
FVector2D IconDimension { 45.f, 45.f };
};
USTRUCT(BlueprintType)
struct FInv_ItemDescription : public FInv_ItemFragment
{
GENERATED_BODY()
public:
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Inventory")
FString ItemName;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Inventory")
FText ItemTitle = FText();
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Inventory")
FText ItemDescription = FText();
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Inventory", meta=(Categories = "ItemType"))
FGameplayTag ItemType = FragmentTags::ItemType::ItemTypeMaterial;
};
@dark drum
So for items that is not stackable, I just don't add stackable fragment.
when picking up item, I iterate over the array and check if stackable exist or not.
I was advised that this can be dangerous in multiplayer though.
Why though?
Is there some problem with them in MP, or is it just easier to hack with things like memory manipulation
I might look at making another inventory system that uses instanced structs. Do you still use uobjects to house the instanced structs?
Yeah, the item it self is a UObject, it house the instanced struct.
UCLASS(BlueprintType, Blueprintable)
class AGINVENTORY_API UInv_InventoryItem : public UObject
{
GENERATED_BODY()
public:
virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
void SetItemManifest(const FInv_ItemManifest& Manifest);
// Const getter for the manifest.
UFUNCTION(BlueprintCallable)
const FInv_ItemManifest& GetItemManifest() const { return ItemManifest.Get<FInv_ItemManifest>(); }
// Getter to mutable manifest.
UFUNCTION(BlueprintCallable)
FInv_ItemManifest& GetItemManifestMutable() { return ItemManifest.GetMutable<FInv_ItemManifest>(); }
virtual bool IsSupportedForNetworking() const override { return true; }
private:
UPROPERTY(VisibleAnywhere, meta = (BaseStruct = "/Script/AGInventory.Inv_ItemManifest"), Replicated)
FInstancedStruct ItemManifest;
};
InventoryComponent has ItemList (A FastArray of UInv_InventoryItem)
if you have some money to cough (cheaper than a video game these days), I got all of this idea from StepehenUlbardi inventory tutorial.
just grab what you need, don't need to look at the whole tutorial.
might be a burden on the bandwith. In MP you want to send as little as possible.
Ah, that's fine. My data is static so I only replicate a name and load locally
is it normal for the Disable Input node to sometimes not work?
I have this node setup which makes the character taunt
so when that happens, the input must be locked temporarily
but in my case, sometimes it works, and sometimes it doesn't
all enhanced input nodes are inside the custom player controller, and they send the signal into the character through the blueprint interface
I don't like the idea of disabling the entire input just to commit an action.
like what if you want a pause button to work at all time.
also nothing is plugged to the player controller.
I know, cause appearently it works in other places around that graph
well that sounds even more alarming if you enable and disable input in many places.
like you disable the input right at the taunt but something else enable it before the taunt montage finishes.
Is there a way to filter structures inside the selection window in unreal? I thought the BaseStructure should work, but it doesn't, it shows every structure from the engine when I want to add something inside the blueprint data table field.
UPROPERTY(EditAnywhere, meta = (BaseStructure = "/Script/TavernGame.ItemFragment"))
TArray<FInstancedStruct> TypeSpecificData;
It works on me.
Hmmm. Maybe I'm missing something, I recently migrated to 5.7
Its not like other play montage nodes can just fire without being triggered first
shouldn't be effected.
Can you show your module structure and the struct that you want to use.
Sorry that was directed at VeraelHasta
Oh
can you show the whole .cpp and .h
@crimson briar what about your ItemFragment struct.
@crimson briar if you add the Project MACRO does it help?
Project macro?
@crimson briar Oh it's BaseStruct not BaseStructure X_X, you have typo in your meta specifier.
UPROPERTY(VisibleAnywhere, meta = (BaseStruct = "/Script/AGInventory.Inv_ItemManifest"), Replicated)
FInstancedStruct ItemManifest;
Hi guys, I am working on a VR classroom setup with MetaHumans in UE5.6 and I am trying to get the MetaHumans to look at the player (VRPawn). I am having a hard time to get the pawn location know in the face animation BP, since I am not super familiar with how casting works between blueprints in UE. I found a way to make the MetaHuman look at certain coords, but the connection with worldlocation of VRPawn is missing. Does anyone know this and want to help me out?
ffs
Yeah, it was this. Good catch, thanks
I wasn't even looking at this part lol
kinda missed sometime because it's not compile time error.
Yeah, I'm too used to IDE telling me I have a typo or smth lol
that's what IDE is for :P.
Wait, am I in the correct channel for help with blueprints?
you are but sometime you have to be patient, channel is not always active.
also casting is just a type check. Your anim instance can get context (the location it wants to look at) from the owner.
Yeah, of course. I just saw a lot of programming, which made me doubt.
just some work that requires action outside bp
BP_NPC->Event Tick -> Pick the closest character to look at in radius -> Get the location of the head socket.
AnimBP->Init -> Get Owner -> Set BP_NPC
AnimBp->Event Tick-> BP_NPC->GetLocation of the head Socket -> Interp head bone to Location.
I think I'll switch the input lock method differently
I'll probably use branches and booleans
or maybe gates
yeah, gates are more reliable
GAS made it easy for me.
anything can be made into a state, and when commiting an ability (e.g playing a montage or taunting), I just check for any blocked tag.
then for outside GAS, I just have a function to check.
e.g bCanOpenMainMenu.
and it would just check if the player is currently interacting, in cinematic or moving, etc.
nothing that require more than 1 branch
I did saw gameplay ability system somewhere while on the phone before, and completely forgot about it later on
I'mma try it
or maybe not if it didn't require c++....
gate node it is >:)
technically I would've agreed to use GAS, but since mah pc needs 2 minutes per compile, a huge and fat NO is the answer to that
until I have better pc hardware (which will probably be never cause of prices nowadays)
You don't need to compile really except for when adding attributes. Which is wildly rare.
never in my life have I seen anyone put code without compiling later
never
Hmm? I mean that to use GAS, you can do everything in BP. You only need to compile if you add a new Attribute.
pass
Also modern compilers don't recompile everything every time unless you change something in the default engine settings. So compile times are very short unless you change a lot of dependencies at once
for me, all I need to do is add one super short line of code as an addition, or remove it, and it would take almost 2 minutes, or more than 2 minutes everytime
recompiling saves only 1 minute
still, I'mma just stick with blueprint
and since gate turned out to be a bad choice, I'll be using a boolean and branches
Does anyone know how I can make something fire out projectiles in a random angle?
I'm trying to set up shattering ice that launches a bunch of ice projectiles out of itself
is it possible that an integer variable inside of a widget changes back to 0 (or just doesnt save) when widget is removed from parent and then added to viewport?
I am trying to add FSR UI controls here and it almost works but when i close down this widget and open it back up again the FSR Index i made is always back to 0 (so the fsr is set to native aa), even if i switch it to something else before
this same setup works for other normal graphics settings like GI, Shadows and whatnot but i think since they are proper engine settings so they always stay correct if i close and open the ui widget
Anyone knows if I can spawn an actor based on a Render Target ? I mean spawn actors only where the render target is white for example?
Typically if you're removing from parent, you're usually destroying the widget in the process unless you hold reference to it somehow. The best way of handling it is making sure you're reading the value from a source rather than requiring the widget to know it - the widget should read it from somewhere.
i quickly tried doing it with putting the index variable inside of the character bp (it always exists), then SET that index but even then when i close and open the widget it defaulted back to 0
Probably not great to store in the character BP either. Are you having your widget actually read from the character on construct?
I have an object pooling system for my projectiles where i spawn them all under the map. when the player presses fire whats the best way to make the projectile shoot out of the players gun
Render targets are 2D. You wouldn't be able to accurately spawn actors in a 3D space with them as they have no depth.
Oh ok I see.. thanks ! I'm trying to solve my issue with many methods but it seems impossible lol
do you need 3D tho?
you can certainly paint a 2D mask, and ignore Z if it's not relevant
I can have an arbitrary Z location
It's just that my "texture mask" is a render target
And the "read from render target" blueprint node seems very bad for performance
My "Render Target" is drawing "trails". I'm using that "Render Target" to remove some meshes based on Opacity (from the "Material") where the trails are and I want to spawn an Actor at this same place
yea that sounds inefficient, since you likely have to read the whole texture every time you want to update
I'm really stuck at this point ๐
At first I thought I will add collisions (only query) on the Meshes so I can have a "line trace" or something to then spawn the actor but it seems also inefficient to have so much meshes with collisions
So I made a Render Target so I can disable collisions
But now I'm stuck because I don't know how to tell that I'm intersecting with this "Mesh" from Blueprint or Niagara or something without collisions lol
My Render Target works properly and is quite accurate but can't have any logic to be implemented from that
I think it would work out like:
Have 2 functions on your bullet:
Fire -> Takes 2 Vector inputs, StartLocation, Direction
-> Unhides VFX aspects, enables any collision, begins playing any looping audio, sets actor location to the start location, sets direction in the movement component, activates the movement component.
CleanUp -> Hides VFX, stops any audio, disables collision, disables movement component, resets the location to your pool.
so this is odd, it won't try to read the array...?
the loop is inside another for each loop btw
not sure if that's important
oh I see now
for some reason, the name array loses it's data despite being assigned the data from begin play node
so that means I need Get Data Table Row Names everytime ...?
yep...
I try to spawn a test mesh into the hand of my pawn, but the attachment doesn't work. Instead it throws me through the world. What did I do wrong?
Its likely a collision problem with your player character. Make sure the gun's collision is disabled when attached to your player.
Ah yes, collisions ๐ IgnoreOnlyPawn is working good, but it is still attached to the crotch instead of the hand. The socket exists on the skeleton.
But you're not attaching it to the skeleton.
Pawn's root is their CapsuleComponent. I don't think the capsule has that socket. You'd need to cast that to Character class and call GetMesh, and attach to that.
when i set the location of the actor to the player gun the sphere component isnt moving with the actor annd is staying in the pool location
ooooh, I'll try that
why would the child components not move with the actor on set actor location
They're using Absolute positioning, or they've been detached.
there defo not detached so how would i make them not use absolute positioning
In the component's details panel, look at their Transform. There's a little drop down next to Location
its on relative atm
If that's not Absolute, might need more information, because those two things in general are the only thing that causes a component not to follow its transform hierarchy.
could it be that it was attached to a deafult scene root
yeah that fixed it
how do u make a projectile movement component start after setting auto activate to false
I think there's a SetRelativeVelocity, or something similar call.
i think that happens for physics objects depending on how they are set up
e.g. if the component updates the actor transform and just overrides your change later
ive got a probably very simple question, but I need someone to help explain it to me
Im fully familiar and away of how the interp nodes, and delta time and alphas work and such, and ive animated with curves and such before I under stand easing in and out and whatnot.
but im having a hard time really figuring out how the hell the ease node works, I feed in my A and B values and it should ease from A to B no?
whats tripping me up is the interp nodes have a simple interp speed pin, whereas the ease one has alpha nad blend exponent
If someone could help clarify or provide an example how it works Id appreciate it
my projectile now moves when activated but i cant get it to move any other direction that world x axis
Does collision get messed up when a skeletal mesh is a child of a root physics component? A BP of mine has this and it keeps falling through the floor, but this doesn't happen when a static mesh is the child, when no child is assigned, or when the skeletal mesh is placed in the world independently. Checked collision and physics a bunch but everything looks okay.
Alpha is what is used to determine where you are in the blend. (0 = fully at A, 1 = fully at B) The Blend Exp changes the shape of the ease function.
but regardless of the alpha it will always fully reach B no? or does it actually stop at whatever fraction the alpha is at ?
If the alpha being fed in is 1, then the result would = B.
I get that, let me ask it this way then
Im setting up a function that handels some camera movement rn, it just uses the interp node most of the time because I want it to be snappy, but im t ying to use the ease as a way to have it settle near the end of the movement but I need it to fully reach the location obviously. So if the ease stops short based on the alpha then I cant really use it
This node is pure math. It transitions the value from between A and B based on the alpha value fed in, and is smoothed based on the function selected rather than being linear.
So no, if your alpha being fed in doesn't reach 1.0 then it wouldn't reach B.
ok that helps a lot and clears things up so Im not wasting time on it
not really the node I need then for this thanks
I'm struggling to understand why const pure blueprint functions need a target while just pute blueprint functions dont. Could someone explain? Is it just to say "This function does not effect the members of this specific object"?
Const is just a means of indicating that the function doesn't modify state of the object.
What it sounds like you're looking for is a static function. You can create these within BlueprintFunctionLibrary objects as well.
I'm just confused why a pure bp function doesn't have a target (so basically its static) but if you make it const as well, it does now need one. My guess would be to specify in relation to which object it is const?
That would seem to be the case.
aight, ty!
yeah this projectile movement component just does not wanna move
it just does nothing for some reason
Not SetVelocity. There's a different one that's actually a function.
If I recall it's a relative direction. Usually you'll rotate the projectile at the target and then call that with X+ direction.
theres no option for that
still just stationary
for some reason it doesnt worrk unless its activated and given a start velocity when its spawned in
Leave it activated. There's another setting... Sec I need an actor class open.
I think you just leave it default. Don't set an InitialSpeed. Don't disable AutoActivate. And then call that SetVelocityInLocalSpace
ok ill try that
its still just stationary and doesnt move
this is so frustrating how is it not moving lol
Hey I've had a similar question - as far as I can tell, Alpha is equivalent to Delta Time on the Interp nodes
Blend Exp seems to be the curve on the easing graph (how sharp the ease is) - a lower number is a very soft/floaty ease where a higher number is quicker and sharper
idk if that helps, i came here with the same question and this is what i've managed to figure out so far
weird so my velocity is definitly being set but its not making the projectile move
strange
Is there any chance it's colliding with something instantly? Can you spawn it far away from anything else?
ive moved it far away maybe because all the projectiles in the pool are spawned in the same place?
Alpha isn't DeltaTime.
Alpha is a percentage. 0 to 1.
0.0 = 0%
0.5 = 50%
1.0 = 100%
DeltaTime is the delta of time between two calls. In Unreal this is often the time between two frames drawn to screen but it can differ from that.
Using a Lerp node, you use Alpha to drive how far along something is from a start to a finish point. So every call needs to know the same Start and Finish for this to function correctly where Alpha is the only changing factor, this lets you smoothly linearly interpolate between two set points.
InterpTo nodes are different in that they just try to use a current location rather than a start point. There is no percentage, it just maths a point closer and closer to the target each frame based on the things current location and to do this it needs DeltaTime to figure how fast it should move to stay framerate independent and not move faster on a machine running at a higher FPS.
Realistically. I wouldn't bother pooling projectile actors.
Pooling is good. But this is one of those cases where by the time you need to pool projectiles for performance, you need to consider cheaper alternatives anyhow.
If you must have a pool then start with just 1 to rule out all the potential projectile to projectile shenanigans. Just every shot resets and refires the same projectile. Get that working then worry about adding more.
ahhh that makes sense, in the case of a Ease node what should one plug into Alpha?
i need the pool cus its a uni project i just dont get why its affecting projectile movment component
ive made it so theres only one projectile in the pool
but still is behaving weird
Ease will be the same thing as a Lerp. The only difference is that Ease does it based on a curve, so you can do easing. So same 0 to 1 percentage, just that it remaps the percentage based on the curve you pick.
I need help finding boxextent and box center from a array of locations https://blueprintue.com/blueprint/379f451x/ This blueprint in my mind should work! but all I am getting is a small box not at all covering the area
and the center is awlays way off to the left
works on server doesnt replicate on client. both the actor and the component have replicates checked, I sure im missing something
this is run in the game mode blueprint
@narrow surge where do the material set lives?
game mode bp
Have you went through exi compedium pinned in #multiplayer ?
If not you really should before going further
Game mode only exist on server.
Meaning clients doesnt have a copy of the game mode.
ah this is helpful thankyou very much
Very important to go through the pinned materials.
- Game mode only exist on server.
- Clients only have their own controller.
- Server have everyone's controller.
- Everyone have GameState.
- Everyone gets a copy of player state.
this material set can just be done on the actor.
E.g Bp_Door
Server -> SomeEvent -> Bp Door -> Set Material Set (replicated variable) -> Set door material
Bp Door -> OnRep Material Set -> Set door material.
I appreciate it, theres so many pinned things and multiple with the label compedium, your insights helps me sift through and focus
exi compedium and wizard multiplayer tips and trick is a must.
I read it like 2 dozens times with experiments until it click.
my take is you will benefit greatly if you start very very simple when learning from those articles.
instead trying to tackle your mp project, try to sync a door opening / closing, or changing materials on something and have the changes sync.
I found another way aside to get the time inside the game. The Get Game time in seconds works well, but if you want a more supernatural method the Demonic Clock works wonders
is the for loop with break supposed to be buggy?
when the array inside the for loop fires the custom event node to break the for loop with break, it still continues, despite telling it to stop firing
at first I didn't know why the string array would have a missing item despite being identical with the dynamic string array
so I added a breakpoint on the each loop node inside the for loop with break and watched the whole thing step by step
the moment the trigger reached the true execution and fires the "Stop Input Search", it didn't went through the Completed execution pin.
Instead it went back into the Loop Body execution
lemme make a short video of it
like, I'm not sure why this happens, this is not normal
or I may be missing something
this is the latest ue 5.6 version btw
If you print string right after the inputs with nothing connected what does it do?
where?
The very first node that starts everything
the for loop with break?
they are different for loops?
you are breaking a different for loop then the one you are calling initially
so its looping inside the one that you call initially
which makes sense because you didn't interupt that
also i would never put logic like this in bp
becomes hard to debug / understand
code is easier ๐
the for each loop is inside the for loop with break
so when the custom event node fires, the for loop should just stop running and fire the completed execution pin instead
no it shouldn't that's not how it works
if you have 2 for loops inside eachother
and you are looping the inner one
but interupt the outer one
so it will finish the inner one before checking if it needs to stop the outer one
you literally stepped through what happens in BP
the inner loop doesn't have the bool set to interupt it
I knew it....
stupid gpt man...
and I actually looked up the internet first, and found no answer
so I HAVE to end the inner loops before the outer loop
if you want to stop at that point yes
This is where using functions can be helpful. If you return inside a function, any loops inside the function also stop. It can be a nice way to end a loop early without needing to break.
in c++ code it would be more intuitive
well my pc ain't built to work with unreal c++
so I'm stuck with blueprint till I can afford a better hardware
compiling is less intensive then running the engine
you could probably compile an unreal project on a phone / tablet these days if it had android support
stupid GPT saying that ending the outer loop also ends the inner loop automatically man....
in c++ maybe
chatgpt has like a 85% hallucination rate and isn't trained on the specifics of blueprints
it cannot tell you "i don't know" it will just make something up
at least it helps figuring out some coding logic
it can make suggestions
double check them with other sources
like by debugging yourself and stepping through it so you just see what is going on
that can never lie to you
you set a bool in the outer loop, but then you can see that the bool to finish is only checked after 1 iteration of the loop is completed
well, now I know that you cannot end the inner loop automatically in blueprint by ending the outer one
now it all works as it should
yeah but do you understand why?
If you're logic was in a function it would but it looks like the logic is in the event graph so its life cycle is a little different.
you explained above
Personally i tend to avoid using the main event graph unless I need a replicated event (multicast) or need to use latent nodes. (Async load and timelines mainly)
I'm still learning blueprint, so I have lots of more methods to know about
That's looks very busy and might be feasible to break it down into simple steps. You have multiple loops, sequence branches etc. Just a lot going on. A loop can be used in many ways, but as an example this loops purpose it just to sift through an array to match a result. (If an item is equipped for example then exit).
It looks like you have counters and all kinds of things going on.
yes, I'm working with data tables by checking if both the string array from the mashed input and the string array made from the selected table row have identical items
What is is actually doing at a basic level?
if both arrays are identical, end all the loops and exit from the main loop
No I mean the basic game play level
it checks if the pressed input combo matches one of the rows from the data table
The most basic level. Are you checking if a button combination is being pressed? Or like a Street Fighter Combo ( -> -> RMB)
Those are two different things.
street fighter combo type
The enhanced input system has a corded action which is multiple key inputs (Like Shift + F) is required
string array 0o?
You can also do unlimited combos with 2 variables. A timer and counter variable.
๐
we encounter great spaghetti everyday here, such a blessing
I know
I wanted to use that in the first place
but then I decided not to use that...
because you'd have to implement a new enhanced input per combo attack ๐
plus that you'd still have to go through the same part to make sure that the initiated combo attack has a matching input from the data table
so the method I'm using is more dynamic
what you would usually do is keep a list with all inputs that were pressed and clear it if nothing is pressed for 1 or 2 seconds
already taken care of
then in a seperate event tick you just loop over the list to see if it matches a combo
but dont do it with string
anything else
To be fair. You shouldn' tuse EIS for things like fighting game combos.