#blueprint

1 messages ยท Page 391 of 1

atomic hollow
#

why , you said that add index

#

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

last peak
#

ye its usefull haha

atomic hollow
last peak
#

It goes a bit against general coding practices of avoiding redundancy and overengineering

#

However compiling logic into macros is fine

atomic hollow
dark drum
# atomic hollow Yes i create crazy things, everyday, but some are out of people mind in here, th...

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.

silk rampart
#

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.

dark drum
lyric rapids
#

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

lyric rapids
#

It just moves to the position of my gun

#

But doesnt move

modern cove
#

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

modern cove
#

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.

last peak
#

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

modern cove
#

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,

shut blaze
#

Hi engage

rapid jolt
#

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?

faint pasture
rapid jolt
faint pasture
#

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

rapid jolt
#

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

faint pasture
#

try set simulate on all below pelvis and see what happens

rapid jolt
#

like this?

faint pasture
rapid jolt
#

testing...

#

success! I may need to select a slightly higher bone, but this is a great start

#

thank you!

faint pasture
rapid jolt
faint pasture
#

set all bodies below blend weight or something like that

rapid jolt
#

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!

dark meadow
#

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

warm oriole
#

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?

marsh valley
#

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

crimson briar
# marsh valley so im still new to programming and iv been stuck on fish for days now and this i...

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.

dark drum
# dark meadow The Actor Component can't run nodes I need related to stuff specifically inside ...

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.

dark meadow
#

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

marsh valley
maiden wadi
marsh valley
maiden wadi
#

I would strongly advise you take a consideration at doing this in Niagara.

crimson briar
#

Make it a particle then

marsh valley
spark steppe
maiden wadi
#

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.

marsh valley
#

ill look into it im still learning as well but if its less headace for me im up for it lol

maiden wadi
#

Check out uh...

spark steppe
#

there's a bunch of flock tutorials in Niagara on YT

maiden wadi
#

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.

dark drum
# dark meadow Anything to do with sprites I guess

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.

marsh valley
#

i already saved it lol im looking into it now

dark meadow
last peak
dark meadow
#

the component won't have a sprite in it

last peak
#

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

dark meadow
#

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

last peak
#

there you go

dark meadow
#

I tried that and it didn't give me anything?

last peak
#

Youve put in the wrong component then

dark meadow
#

what do you mean

last peak
#

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

dark meadow
#

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

last peak
dark meadow
#

Believe me I'm really trying

#

I've been trying all day

last peak
# dark meadow I've been trying all day

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

dark meadow
#

All my variables and events just come out as invalid

last peak
dark meadow
#

I just deleted it to start over
I'm going to take a break, I'll have to come back later

spark steppe
#

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 ๐Ÿคท

dark meadow
#

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

last peak
spark steppe
#

then they should likely have a common baseActor class which sets this up and implements the behavior

last peak
#

composition > inheritance ๐Ÿ˜›

spark steppe
#

no

last peak
#

yes

dark meadow
#

I've been told to make a component so I'm not copying and pasting code and making 30 variables for every status

spark steppe
#

implement it in the baseactor then, no need to add a component to two actors which inherit the same base class

dark meadow
dark meadow
last peak
#

Thats the last thing you should do in bp ....

spark steppe
dark meadow
#

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

last peak
#

Not in bp

dark meadow
#

then replaced them in the copied code

#

one by one

last peak
#

No

#

They are annoying to access and modify and they WILL break sooner or later

dark meadow
#

This just feels like one of you likes apples and the other likes oranges

last peak
#

Its less a matter of taste and more a matter of will it break the entire project

#

and bp structs will

dark meadow
#

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

last peak
#

If you want to use structs so badly declare them in c++

#

Expose to bp

#

and then your good

dark meadow
#

By how much?

spark steppe
#

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

dark meadow
last peak
spark steppe
last peak
#

components are a object structs are not

#

so the struct will always be faster

#

no memory overhead

spark steppe
#

that's... questionable reasoning for giving recommendations ๐Ÿ˜„

#

as if that 1kb of overhead would be an issue here

last peak
spark steppe
# dark meadow I'm so confused, what should I do then

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...

โ–ถ Play video
last peak
#

If the difference is significant is another story ๐Ÿ˜„

dark meadow
#

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

spark steppe
#

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

dawn gazelle
#

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.

spark steppe
#

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)

dawn gazelle
#

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.

spark steppe
#

and no need for any component

dawn gazelle
#

A health component is nice tho... ๐Ÿ˜›

last peak
dark meadow
#

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?

dawn gazelle
#

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.

last peak
# dark meadow that still doesn't help with people earlier saying I need to make it so I'm not ...

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

spark steppe
#

too bad that we can't make polls in this channel... ๐Ÿ˜„

dark meadow
spark steppe
#

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

last peak
spark steppe
#

but that will likely come with a aspirin prescription at this point

dawn gazelle
#

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.

last peak
spark steppe
dark meadow
#

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

last peak
#

Done

dawn gazelle
#

pain.

dark meadow
#

Yeah

#

that

#

I was told explicitly NOT to do that

#

which is why I'm here now

last peak
#

THis is exactly what you should do

dark meadow
#

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

last peak
dark meadow
#

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

last peak
#

We need a server badge ..... "struct lover"

dark meadow
#

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

last peak
#

all a struct really is is this panel seperated

dark meadow
#

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?

spark steppe
#

gameplaytag!!!

#

you just successfully opened another can of worms, Maps, and whatever we prefer as key type ๐Ÿ˜›

dawn gazelle
#

I mentioned Gameplaytag > Float map earlier <_<;

last peak
#

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

dawn gazelle
#

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.

spark steppe
#

xD love how you throw more rocks at someone who is already confused

spark steppe
dark meadow
#

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

spark steppe
#

no structs required, no data assets, inheritance and modular composition, you get the best from all worlds ๐Ÿ˜›

dark meadow
spark steppe
dawn gazelle
last peak
#

thats what its for

spark steppe
#

finally a fact we all can agree on ๐Ÿ˜„

dark meadow
#

this is getting so messy to try and make it "streamlined"

dawn gazelle
#

Effects are a difficult thing to do well imo <_<;

dark meadow
#

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

last peak
#

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 ๐Ÿ™ƒ

dark meadow
#

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

spark steppe
#

i've linked something else tho

last peak
#

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

dark meadow
#

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

last peak
#

You could put an array in a struct hmm

spark steppe
#

the issue in your code is likely that you always compare the same distances

#

as you overwrite the "1st element" object every loop iteration

dark meadow
#

How would I only make it do it a limited amount of times

last peak
#

So you would have a component that handles incoming dmg Ac_Stats or Ac_Combat

spark steppe
#

branch on array index < 5 if you want to limit it to 5 actors (and eventually break the for loop to abort it early)

last peak
#

@dark meadow For how long are you working in Unreal already ?

dark meadow
#

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

dark meadow
# last peak <@355652829811310605> For how long are you working in Unreal already ?

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

spark steppe
#

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

dark meadow
#

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

spark steppe
#

NO

#

you use the damn function i've linked earlier

dark meadow
#

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

spark steppe
#

the logic is just flawed

dark meadow
#

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

spark steppe
#

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

dark meadow
#

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

spark steppe
#

it's nice to know how far the closest enemy is away....

dark meadow
#

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

spark steppe
#

it baffles me to this day that there's no method for that in BP

#

it's one line in cpp...

dark meadow
#

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?

spark steppe
#

xD

#

this gets wilder by the minute...

#

it's totally unnecessary, because the array is also empty at this point

dark meadow
#

Okay I'll remove it

spark steppe
#

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

dark meadow
#

I finally copied this

#

Yee

#

I do

#

my mistake

spark steppe
#

oh god, what is the index for?

#

don't tell me you assume that the method gives you a predicted order during multiple calls

dark meadow
#

Is the Index variable a ETouch Index or an Enum?

#

Oh Integer?

last peak
dark meadow
#

I'm struggling with colours???? not my concern right now

spark steppe
#

@last peak say something

#

at least one person here must see that this is going against a wall

dark meadow
#

Historical moment

last peak
#

๐Ÿคท I just come in here every 15 - 30 minutes to laugh ๐Ÿ˜„

dark meadow
spark steppe
#

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)

last peak
#

Isnt that super op ?

dark meadow
#

The spell or the loop

#

:)

last peak
#

the spell

#

its hitting every actor in a row

dark meadow
#

We're gonna cap it

#

Also I'm debating making it so every time it chains it takes magic resource off the player regardless

last peak
#

how the heck are you not done yet tho ? XD

spark steppe
#

until the index is set by one iteration and no one will be ever zapped again because it's still blocking

last peak
#

Isnt this entire thing something you do in 3 minutes

dark meadow
#

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

#

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

#

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

maiden aurora
#

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?

true valve
#

can you use soft ref for this data table?

frosty heron
#

just soft ref the content inside the data table.

#

e.g the Textures, skeletal mesh, etc.

dark drum
# maiden aurora Hi guys, Iโ€™m having trouble implementing pixel-perfect panning for an orthograph...

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.

steady night
#

dumbest thing ever

#

its not showing the custom cursor, the default one is still showing...

wet turret
#

How can I make the rotation stop after 2 seconds and make changes to its speed during said time?

maiden wadi
wet turret
#

So like a set timer?

maiden wadi
wet turret
maiden wadi
# wet turret So like a set timer?

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.

wet turret
#

oooh I'll try that

#

thx

steady night
maiden aurora
# dark drum Assuming I'm understanding you correctly, you'd need to calculate the relative p...

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.

wet turret
#

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

dark drum
#

When simulating in the editor, does a game state get created for the simulation?

narrow surge
#

if a cast to node fails a cast will it continue down the code line somehow?

dark drum
narrow surge
#

hmm okau

flat coral
#

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)

maiden wadi
maiden wadi
#

DefaultScalability.ini

flat coral
#

Exceeeeeppt I dont think this pack even looks at that INI

maiden wadi
#

Pack?

flat coral
#

Yeah the asset pack I'm working with here. It's like... space creator or something like that.

maiden wadi
#

I'm not fully following. What does a specific asset have to do with your scalability settings?

hearty light
#

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.

maiden wadi
#

Looks like a race condition. Can you show your asset's reference viewer?

spark steppe
#

i would check if you can enable more verbose debugging through packaging, so that it tells which object it is working on

spark steppe
hearty light
spark steppe
#

nvm

maiden wadi
#

BP_UnitBase

#

Both needed by and referenced by this.

hearty light
#

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?

spark steppe
#

casts at least create a reference, yea

tawdry osprey
#

Is there a way to cast to my character class inside the game state class. or should i go a diffrent route about this.

hearty light
#

lemme give it a try stripping it completely

maiden wadi
# hearty light

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.

maiden wadi
tawdry osprey
#

multiplayer

maiden wadi
#

What is the context? Why do you need to get a character?

hearty light
maiden wadi
#

Good luck! ๐Ÿ˜„

tawdry osprey
#

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

maiden wadi
#

But which player? Or all of them? Like wait until every player is dead, then start new round? Or

tawdry osprey
#

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

maiden wadi
#

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.

tawdry osprey
#

okay. lemme try hooking this up. so player array > For each loop > get pawn > cast to char BP > check if dead > Respawn?

maiden wadi
#

I think so. Though one curiosity is the spectator part. How are you making them spectators?

tawdry osprey
#

a BP class that spawns on a socket at the player its a seperate class in itself

maiden wadi
#

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.

tawdry osprey
#

copy. looks to have respawned the player just need to add logic for where the player spawns and reenable input. thanks for the help!

hearty light
#

ok I removed the references in the encounter manager and other places, but still popping up with the error?

maiden wadi
narrow kite
#

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.

maiden wadi
#

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.

narrow kite
#

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?

maiden wadi
#

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.

narrow kite
#

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.

maiden wadi
#

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.

hearty light
# maiden wadi Hmm. Can you do he thing with the sliders in the top left and check further out ...

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.

narrow kite
maiden wadi
# narrow kite That's the main reason behind the concern. That just seems like a potentially b...

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.

maiden wadi
#

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.

hearty light
#

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?

maiden wadi
dawn gazelle
# narrow kite And this time it's NOT a broom! It's a pitch fork

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.

narrow kite
#

UI Damage text widget is what's actually setting it here

dawn gazelle
#

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.

dark drum
narrow kite
last peak
#

Did i hear bindings in widgets?

narrow kite
odd kiln
#

Hey all ! Can I read a Texture (Render Target) from Blueprint ? I want to spawn particles based on a Render Target location

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

odd kiln
dawn gazelle
#

Read Render Target Pixel

#

But, using a render target to decide that may not be the best option performance wise.

odd kiln
#

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

dawn gazelle
#

Why not just tell the niagara system where to spawn them specifically based on data from the player?

odd kiln
#

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

dawn gazelle
#

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.

narrow kite
odd kiln
narrow kite
narrow kite
narrow kite
#

That sounds like it requires C++ coding?

dawn gazelle
dawn gazelle
#

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.

dawn gazelle
#

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.

narrow kite
#

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

dawn gazelle
#

If you want to avoid bindings, then yes, you would do that for the text as well.

#

You'd need the node "Set Text"

narrow kite
dawn gazelle
#

Drag off from "TXT Damage" and type "Set Text" (it may be SetText)

narrow kite
#

It does make sense. No point in grabbing the value every frame when it's not changing.

dawn gazelle
#

Precisely ๐Ÿ™‚

last peak
#

Just learn cpp then wtf XD

surreal gate
#

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?

narrow kite
#

150 Font, the most under used tool in Unreal.

narrow kite
narrow kite
#

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

dark drum
dark drum
true valve
#

Is there anyway to enable EditLayer for landscapes after creation in UE5.7?

narrow kite
# dark drum You can get the font settings from the text box and then use set member. This ca...

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.

winged zephyr
#

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.

stark ridge
#

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?

severe wagon
#

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

queen heron
#

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

dark drum
queen heron
#

ah, I see
thanks ๐Ÿ‘

queen heron
#

or bone's roll angle

dark drum
queen heron
#

or I focus on this gizmo?

dark drum
queen heron
#

So the trace will allways hit the target no matter how fast it moves

spark steppe
#

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 ๐Ÿค”

queen heron
#

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

spark steppe
#

use normal physics collision (with CCD when necessary)!?

queen heron
#

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

spark steppe
#

well, it should be a physics asset on the skeletal mesh to begin with

dark drum
# queen heron they're thin, and can be troublesome if they move too fast

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.

queen heron
#

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

dark drum
queen heron
#

this is what I'm doing

dark drum
# queen heron pretty much what I'm doing now

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. ๐Ÿ˜…

#UE5 #GameDev #IndieDev

โ–ถ Play video
queen heron
#

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

dark drum
queen heron
#

so do I not use the angle?

dark drum
# queen heron 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.

queen heron
#

alright then

#

so rotation per second was never an option

#

it's vector velocity

dark drum
queen heron
#

rightyo
thanks for help

dark drum
full badge
frosty heron
#

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.

dark drum
frosty heron
#

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.

#

imagine 60 fps ๐Ÿ˜„

dark drum
frosty heron
dark drum
frosty heron
#

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.

frosty heron
dark drum
frosty heron
#

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.

surreal peak
#

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

hollow pond
#

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?

steady night
#

Hi, If i have a Enum with 4 indexes can i increment them by 1 without doing sphagetti code somehow ?

hollow pond
steady night
#

ah ok

#

thanks

dark meadow
#

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

maiden wadi
dark meadow
dark drum
gloomy swift
#

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

maiden wadi
gloomy swift
#

I just now realized that, I should be passing the object which contains the info I want displayed in the list view item

maiden wadi
#

Correct. ๐Ÿ˜„ That trips a lot of people up.

blissful gorge
#

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.

dawn gazelle
# blissful gorge I am making a mumble voice system that uses syllables in each word to make littl...

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.

blissful gorge
#

trouble now is the new macro cannot be found :/

dawn gazelle
#

If you created it within an actor, then it'll only be available to that actor and any subclasses of it.

blissful gorge
#

created it as a macro library

dawn gazelle
#

What as the base object?

blissful gorge
#

didnt follow a guide, just guessed for now

#

parent class is standard macros

dawn gazelle
#

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.

blissful gorge
#

not sure how to reparent

#

no object option

dawn gazelle
#

Actually.... it needs to be Actor... Object can't use delay

blissful gorge
#

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?

dawn gazelle
#

Probably, yea

blissful gorge
#

got it somewhat working, thank you @dawn gazelle

#

it works but needs some serious clean up ๐Ÿ˜

#

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

dawn gazelle
#

Just decrease in the delay. Use concurrency on the audio file so only 1 can be active. hehe

blissful gorge
#

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

crimson briar
#

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?

frosty heron
#

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.

lost wolf
#

can you also adjust them at runtime?

crimson briar
#

In 5.6 it is still a plugin marked with experimental, that is why I was asking. Thanks for the info though

frosty heron
#

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.,

crimson briar
#

Oh, I see, that makes sense

frosty heron
# lost wolf can you also adjust them at runtime?

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.

crimson briar
#

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

frosty heron
#

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.

crimson briar
#

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

dark drum
frosty heron
#
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.

crimson briar
#

Why though?

#

Is there some problem with them in MP, or is it just easier to hack with things like memory manipulation

dark drum
frosty heron
# dark drum I might look at making another inventory system that uses instanced structs. Do ...

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.

frosty heron
crimson briar
#

Ah, that's fine. My data is static so I only replicate a name and load locally

queen heron
#

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

frosty heron
#

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.

queen heron
frosty heron
#

like you disable the input right at the taunt but something else enable it before the taunt montage finishes.

crimson briar
#

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;

crimson briar
#

Hmmm. Maybe I'm missing something, I recently migrated to 5.7

queen heron
frosty heron
#

shouldn't be effected.

Can you show your module structure and the struct that you want to use.

queen heron
#

Will do once I am back on mah pc

#

Currently I'm taking a break

frosty heron
queen heron
#

Oh

frosty heron
#

@crimson briar what about your ItemFragment struct.

#

@crimson briar if you add the Project MACRO does it help?

crimson briar
#

Project macro?

frosty heron
#

@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;
valid mortar
#

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?

frosty heron
#

kinda missed sometime because it's not compile time error.

crimson briar
#

Yeah, I'm too used to IDE telling me I have a typo or smth lol

frosty heron
#

that's what IDE is for :P.

valid mortar
#

Wait, am I in the correct channel for help with blueprints?

frosty heron
#

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.

valid mortar
frosty heron
#

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.

queen heron
#

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

frosty heron
#

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

queen heron
#

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)

maiden wadi
queen heron
#

never

maiden wadi
#

Hmm? I mean that to use GAS, you can do everything in BP. You only need to compile if you add a new Attribute.

queen heron
#

pass

crimson briar
#

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

queen heron
#

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

dark meadow
#

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

steep sonnet
#

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

odd kiln
#

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?

dawn gazelle
steep sonnet
#

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

dawn gazelle
#

Probably not great to store in the character BP either. Are you having your widget actually read from the character on construct?

lyric rapids
#

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

dawn gazelle
odd kiln
spark steppe
#

do you need 3D tho?

#

you can certainly paint a 2D mask, and ignore Z if it's not relevant

odd kiln
#

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

spark steppe
#

yea that sounds inefficient, since you likely have to read the whole texture every time you want to update

odd kiln
#

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

dawn gazelle
# lyric rapids I have an object pooling system for my projectiles where i spawn them all under ...

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.

queen heron
#

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...

modern moss
dawn gazelle
modern moss
#

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.

maiden wadi
#

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.

lyric rapids
lyric rapids
#

why would the child components not move with the actor on set actor location

maiden wadi
#

They're using Absolute positioning, or they've been detached.

lyric rapids
maiden wadi
#

In the component's details panel, look at their Transform. There's a little drop down next to Location

lyric rapids
#

its on relative atm

maiden wadi
#

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.

lyric rapids
#

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

maiden wadi
spark steppe
#

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

lyric rapids
#

its not adding any movement to my projectile by setting velocity

paper gate
#

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

lyric rapids
#

my projectile now moves when activated but i cant get it to move any other direction that world x axis

icy jacinth
#

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.

dawn gazelle
paper gate
dawn gazelle
paper gate
#

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

dawn gazelle
#

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.

paper gate
#

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

wheat citrus
#

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"?

dawn gazelle
wheat citrus
dawn gazelle
#

That would seem to be the case.

wheat citrus
#

aight, ty!

lyric rapids
#

yeah this projectile movement component just does not wanna move

#

it just does nothing for some reason

maiden wadi
#

If I recall it's a relative direction. Usually you'll rotate the projectile at the target and then call that with X+ direction.

maiden wadi
lyric rapids
#

for some reason it doesnt worrk unless its activated and given a start velocity when its spawned in

maiden wadi
#

I think you just leave it default. Don't set an InitialSpeed. Don't disable AutoActivate. And then call that SetVelocityInLocalSpace

lyric rapids
#

ok ill try that

lyric rapids
#

this is so frustrating how is it not moving lol

hidden wigeon
#

idk if that helps, i came here with the same question and this is what i've managed to figure out so far

lyric rapids
#

strange

maiden wadi
lyric rapids
maiden wadi
# hidden wigeon Hey I've had a similar question - as far as I can tell, Alpha is equivalent to D...

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.

lyric rapids
#

yeah its not cause there all in the same place in the pool

#

wow this is weird

maiden wadi
#

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.

faint pasture
hidden wigeon
lyric rapids
#

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

maiden wadi
visual crest
#

and the center is awlays way off to the left

narrow surge
#

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

frosty heron
#

@narrow surge where do the material set lives?

narrow surge
frosty heron
#

If not you really should before going further

#

Game mode only exist on server.

#

Meaning clients doesnt have a copy of the game mode.

narrow surge
frosty heron
# narrow surge ah this is helpful thankyou very much

Very important to go through the pinned materials.

  1. Game mode only exist on server.
  2. Clients only have their own controller.
  3. Server have everyone's controller.
  4. Everyone have GameState.
  5. 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.

narrow surge
#

I appreciate it, theres so many pinned things and multiple with the label compedium, your insights helps me sift through and focus

frosty heron
#

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.

narrow kite
#

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

queen heron
#

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

narrow kite
#

If you print string right after the inputs with nothing connected what does it do?

narrow kite
queen heron
#

the for loop with break?

lost wolf
#

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 ๐Ÿ˜‚

queen heron
#

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

lost wolf
#

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

queen heron
#

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

lost wolf
#

if you want to stop at that point yes

dark drum
#

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.

lost wolf
#

in c++ code it would be more intuitive

queen heron
#

well my pc ain't built to work with unreal c++

#

so I'm stuck with blueprint till I can afford a better hardware

lost wolf
#

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

queen heron
#

stupid GPT saying that ending the outer loop also ends the inner loop automatically man....

lost wolf
#

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

queen heron
#

at least it helps figuring out some coding logic

lost wolf
#

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

queen heron
#

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

lost wolf
#

yeah but do you understand why?

dark drum
queen heron
dark drum
#

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)

queen heron
#

I'm still learning blueprint, so I have lots of more methods to know about

narrow kite
# queen heron so I'm stuck with blueprint till I can afford a better hardware

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.

queen heron
narrow kite
queen heron
#

if both arrays are identical, end all the loops and exit from the main loop

narrow kite
#

No I mean the basic game play level

queen heron
#

it checks if the pressed input combo matches one of the rows from the data table

narrow kite
#

The most basic level. Are you checking if a button combination is being pressed? Or like a Street Fighter Combo ( -> -> RMB)

queen heron
#

yes

#

like that

narrow kite
#

Those are two different things.

queen heron
#

street fighter combo type

narrow kite
#

The enhanced input system has a corded action which is multiple key inputs (Like Shift + F) is required

frosty heron
#

string array 0o?

narrow kite
#

You can also do unlimited combos with 2 variables. A timer and counter variable.

lost wolf
#

we encounter great spaghetti everyday here, such a blessing

queen heron
#

so the method I'm using is more dynamic

lost wolf
#

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

lost wolf
#

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

maiden wadi
#

To be fair. You shouldn' tuse EIS for things like fighting game combos.