In game development, AI behavior trees can be designed to dynamically track and prioritize targets using a scoring system that decays over time, where enemies assign higher scores to players they can see and position favorably, then switch targets when scores change or when the current target becomes unobservable, creating more reactive and engaging enemy behavior.
深掘り
前提条件
- データがありません。
次のステップ
- データがありません。
深掘り
Mimic Development in Unreal Engine 5追加:
Hey, hey, hey.
Good evening everyone. Welcome back to our live stream where we are play testing my game Mimic. Um hopefully everyone's doing okay. I've still got a chest infection. So hey, so apologies if I cough. I can feel my gum already. I'll try and not do it, but it's really hurting my chest lately. Um, I'm going in for a chest X-ray that this week. I need to get a hold of a doctor tomorrow.
But, oh yeah, it's been a nightmare of a week. But, nonetheless, it is uh beautiful weather this week in the UK.
So, we're enjoying the sunshine as much as we can. Hopefully, everyone else is doing okay and is enjoying their time wherever they may find themselves.
Um hopefully everyone's going on okay. I think it's going through. Okay.
Let me double check.
All systems are all good. All green. One sec. One sec. One sec.
Actually, probably better if I click this button.
There we go.
Okay.
Is it working? I think we're working.
Uh, okay. I think I think we're good.
I'm getting some errors popping up on the YouTube side of things. Not errors, but warnings. But let us know if everything's going through okay. Um, I don't know what else I could possibly change, but um, yeah, I'll have to look at that.
Nonetheless, we are good to go.
Um, let's jump into things over here.
Oh, it's okay. Warning is gone now. So hopefully we're good.
bit maybe delayed but nonetheless it's there.
Let me just bring that across. Oh, wrong one.
Okay.
Uh yeah. So, uh let me talk a bit about what I've been working on. Mimic. Not too much this week cuz I've been as I've been ill with the chest infection rubbish. Um but um been working mostly on getting the Android um AI uh better.
So, working and changing it. So they are more likely to attack you uh if they see you uh and just rearrange their behavior tree to make it a bit more uh more succinct. Make it make make more sense basically how they're handling um the approach to finding and chasing the players. Um, still waiting for more animations coming for that to get their attack more in there. But, uh, I think that'll be the hope the main thing going to test today is the Android AI um, to make sure that they are reactive cuz we had we noticed last week um, the android if it was chasing someone would ignore other people and that didn't feel right. So, I changed it around so they're more if they chasing someone, they can't see the one they're chasing, but they see someone else, they're just going to hit them. Um, which leads to better things like you can lure them than the android to a room to attack other people if you wanted to. Uh, which is more interesting as from a gameplay point of view. Uh, what else did I do? I did other stuff. Well, um, some other general fixes. Uh, a lot of backend stuff. Um, one of the back end things I've been slowly working my way through is to eventually get to a point where the game can have mod support. Um, in an easy to use manner. So, I am slow, it won't be there for launch. It's one that will come in post launch. Um, but we're slowly getting things cleaned up behind the scenes so people could eventually add mods to this game and bring in their own maps, characters, whatever they want. Uh, but as I said, that'll probably be a post-launch um support thing going on there. Yeah, cheers, man.
That's cool. Yeah, you jump on wherever you want.
Um, I'm just going to host a private game.
And anyone that's about with a key want to jump in, there is your key code KS B um to join in to the session. If this is your first time seeing Mimik, either watching it live or on the VOD, Mimik is basically Among Us meets Alien Isolation where players have to work together to solve uh some objectives to leave the map. However, one of them on the team is a mimic and another person may or may not be an agent who have ulterior motives. Um, and your job as a crew is to leave without the mimic in your party. The mimic obviously wants to leave.
Uh, iron, I can hear you in the chat call. Hopefully you can hear me. You hear? Can you hear me in the game still?
I haven't changed anything there.
Hopefully that's working.
If not, I may have to go back to the main menu.
>> Um, I can't hear you in game.
>> Okay, it might be it might be an options thing. I'm return to menu. Hold on.
Cuz another thing I did tweak was I tweaked the volume of um Yeah, the mic input. Chose the wrong one.
Uh I'll host another one.
Oh no. Oh, that's a bug. All right, cool. I have to quit the whole game.
One sec.
That's a bug. So, if the host quits out of a lobby, it doesn't clear their session data. So, we need to fix that.
Never too early for a bug.
I I'm surrounded by busted pens. Hold on. Let me host lobby. Right, there's a new lobby code. I'm going to find another pen cuz I'm surrounded by pens that just don't work. One sec.
And I'm back. All right, let me make a note of that.
Uh returns new menu unable to launch new lobby.
Okay. Stuck a joining host again. Yeah, try rebooting.
Uh I'll follow that up as well with the client.
Same issue.
There you go. There you are.
Can you hear me in the game now?
>> Hello.
I'm going to guess not. I think I forgot to actually change the setting, didn't I? Bugger.
It doesn't save the setting. I need to make sure it saves the setting.
No. Yeah. Okay. Well, I can hear you just fine. Just Yeah.
You're not picking up loaded noise from my desk fan, are you?
>> Uh, no.
You're good. You're clear.
Let's jump in and see what the android acts like nowadays.
Okay.
Should try and find a security key.
He's coming.
Heat.
Heat.
Huh?
Heat. Heat.
Heat.
Heat.
So, another thing I want to test.
Oh [ __ ] Um, nothing. I need to test this with the egg respawn.
Oh [ __ ] Heat.
Heat.
Mikat.
Just lost the line. Oh, I came back again. Let's be Heat.
Heat.
Oh, he shouldn't be able to respawn at the egg. That's a new one.
Okay.
I mean, try. I don't think it would let you do it, but try. What happens if you actually click yes to full respawn the egg?
Ah, okay.
Half working then.
Doors now got little lights on them.
Sound effects.
I need more lighting in this area. It's too dark.
Oh, good. He was more definitely more aggressive. Cool.
Egg growth is looking pretty nice.
Looking pretty nice.
Uh oh [ __ ] Didn't see him there. Is he stuck?
Is he stuck?
I think he might be stuck.
I don't know if he's stuck on geometry or is AI stuck. One or two. Oh no. Oh [ __ ] Hey He's not attacking now.
He's not attacking me now.
kill me now.
No.
Okay, let's leave the game.
So, gas canisters are still pretty borked up. Um um in what way it was borked? It was just not working back. No. Yeah. Yeah. Same.
The lobby is broken for me as well.
Well, I can still hear you. So, you must be still in a lobby with me. Just visually can't see each other.
Um, other players.
>> Oh, right. Didn't know you can hear me in the lobby.
>> Yeah, I can still hear you. Uh other players um can off have option to spawn from egg.
Um fire extinguisher. I could hear the fire extinguisher audio you were using from far away. Oh no, I don't think it's fire. Gas can audio.
Um, yeah, it's fine.
Uh, okay.
We come out of there.
I put my fan on cuz it's hot as hell here.
Um, okay. Okay.
We'll try and fix a a few of these right now. Actually, I'm going to load up uh Unreal and see if we can do some dev work uh on stream. Um give you guys also a little peek behind the curtain of some parts of this too.
The android not attacking players sometimes. I think the theory behind that is he has a cool down. Maybe the cool down isn't that's just firing off. Um, when the android attacked you, did he do that successfully without any sort of issue like the starting of it triggering off? Um, or was there sort of weird glitchy delay to it and other things like that?
Cuz I think his attack cool down isn't working by sounds of it.
Uh, okay. I had a canister in my hand.
No interaction key prompts to interrupt the big caners in the crowd chambers. I could still interrupt them, which visually added one out of Okay. All right. Okay. I got you. I got you.
Gotcha. Gotcha. Gotcha.
Uh, at one point I turned it into the mimic. Did you notice any of the um outlining turn red for you? Cuz that was an issue we had last time. I thought I fixed that. Double check that it worked.
Okay. For you.
Was it always white? Should always be white.
Yeah, I think the UI briefly thing I think that's me eating something. I think it messed up the UI for everyone or laying the egg. Oh, it might have been laying the egg. Yeah, something like that.
Uh Muhamad we're now working on actually this we will do development in Unreal Engine 5 not Six. Five.
Um, anyone been playing any games lately?
I've been playing some Nautica 2, uh the new Lego Batman, and I'm looking forward to uh the Bond game, too.
Yeah, I know. It was dark, too. Uh I'm going to add a light to that, I think.
Uh cool.
I've almost done some carto by the way. Why the hell is a game that has that much funding and development and resources still need to go into early access? It's mad.
But whatever. Can't control what people do, I guess.
Yeah.
No, I wouldn't spoil everyone.
I've I' I've seen all the biomes.
Um, and I've uh Yeah, I've done all the biomes. Is there Is there credits in the in the in the thing?
I I don't know if there's credits.
I assume there may I don't know actually.
I don't know what they consider the end of the early access part of it.
I haven't built absolutely everything, but I've done most stuff in it. Uh, okay. Let's start tackling some of these issues.
Uh, right. I'm going to give you actually a sneak peek behind the scenes of how the AI on the beh android actually works. Um, people often ask me cuz I was going to do a talk about this at develop, but I didn't get accepted by developer to go do the talk. So, never mind. Um, so I might as show you here.
So, the way the Android's AI actually works is that, uh, two things. First of all, the way the AI controller is keeping track of things is it looks at every so often, which we have a look at how long it is. I can't it's every second. It looks at who he had known uh information about and then it scores them based upon different things. So this whole function here runs like every second the first thing it does is it calculates any drop off. So, if a player has been seen by the android, the Android adds them to this target scores map here. And when they get first get seen, they get a big boost to that score. Higher the score, the more they're the one who be targeted by the Android. Um, so it starts off by doing a little drop off and taking away a bit of like say drops by 30% every time. Goes down and down and down. Uh, but then it calculates any changes. So here we look at anyone it can currently see using the known perceived actors. If he can currently see them, then it scores them. And it scores them based upon which direction they're facing uh in relation to him. So if they're like if he sees two people in front of him, he'll pick the one that's more directly in front of him or score them higher. Anyway, then he does the same thing but for distance as well. Um which is here. Okay. Okay. So that all gets calculated, but it gets takes into account the distance someone a charact is as well as the angle towards them. Yeah. And that's there calculated there to work out what they're doing.
Uh we then look at the voting stuff. So this is where the players are doing them to themselves. So players can vote with other players to award sus and that sus value here is multiplied by 2.5 and then added to the target scores. So they are increasing that element too. So yeah, that does that. And then at the bottom here, we then find the one with the highest value, whoever it may be. And we look at see if it is equal to their current hunt target. Um if that or at least different to the current target.
If there's someone different, then I'm basically telling my behavior tree essentially to change and do something different uh with the target uh actor value. Okay, now that's how that bit works. Um, so other than that, then we have the behavior tree. Now, behavior tree looks kind of like this. So, it looks relatively simple.
We've got uh a such a tree and this part here is them sort of uh exploring the ship and going to particular targeted rooms. So, if the they've been given a target room by the agent because the agent can send them to different rooms, that would be part of this as well. So if they have no target actor, they do this explore ship thing. Basically, explore ship just finds a room for them to go to and it does it like a bag. So it puts all the rooms in a bag, takes one out and uses looks at that one first and then looks at next one. So it doesn't it won't should pick the same room twice unless it gets reset. Um once it got a room, it will then travel to that room and then it'll search that room. So now it will search deeper inside that room. And the way it does that is each room has like a volume to it and we look inside that volume and project through the uh the nav mesh to find a point for it to explore. So it'll walk around the room that it goes into. Uh previously it was getting stuck at the doorway of it. That's changed now. It now goes in there. Um where does the decay happen for the So the behavioral decay happens right at the start here of my function. So we decay it first and then we add to it.
So everyone gets a little bit decay.
They get decay and also the player sus gets decay too. So we've got double decay happening to uh the AI behavior there.
Uh this part is actually got someone to actually hunt down a target. So when they get a target has been set, it aborts all it's doing here and it goes over to this one and it hunts their target down.
It just moves through the tracker here.
This one looks at what room they're in. So the reason why it does that is let's say someone gets voted in as they can't target.
He won't go directly to uh their position. He'll go to their room first.
Um this also works well for when he loses sight to someone. He'll look at what room they were last they're currently in and go search for it in that room. Um until it decay drops off and then in then it goes yeah search room again. Same same as this.
And that's it. That's his bay retreat.
Um it may get expanded, it may not. I don't know. We'll see. But so far that's what it is. So that's how that works. So yeah.
No no no no. the I think the search room thing I think that got stuck because I have tested it and it did work but it weird random occurrences make it get stuck in certain room um I don't know what yeah search room does does all this moves the location goes there I'll get rid of that now if I want there's a chance to leave the room and if he is going to leave the room. It does leave room and then he finish the execute.
So that's what it does. It will like um give up looking through the room eventually.
Um yeah, so that's not the issue for that.
It's as say it's a weird odd use case for that. Okay, so let's take a look at a couple of these ones.
um the other players been able to spawn at the eggs.
So the way the egg system works is that the player will get the death screen uh UI.
So death and it it goes through this and then it it does all this you died and then it gives you the options and these options are collapsed based upon which role you are. So if you're the mimic you should only see the respawn egg unless you haven't got an egg then you respawn an omen and crew can only ever see an omen. That's detained action but obviously that's not working. Um, I probably forgot to put in the condition to look for the roll of them. So, let's take a look up here.
Um, yeah. So, I was just I was looking at eggs only and change the visibility on the eggs. Um, I need to account for the crew as well. So if they're crew or mimic. So I need to just split that across there.
Get controller roll which is a function I made. I put in the uh get player charact controller and we'll say if that is equal to actually I'll just do a switch if it is. So, this is for the uh uh mimic.
No. And if they're crew, I want this to be copy pasted. It's always going to be save for agent as well, I guess. Um and Omen. Uh I want the eggs here to be collapsed and omen here to be uh visible.
Okay, let's just stop that from agent equals crew. Yes, but there is a uh in this case they'll have the shared function, but they have to be separate roles because they have wind conditions, different abilities, things like that.
So, that should resolve that. And I'm just going to tidy this up a little bit as well. We'll say um collapse that to a function.
Hide show buttons by roll.
There you go. Bit tidier up.
And that's our death screen fixed. Okay, next up. Let me cross that off.
All right, gas canister audio and gas canisters in general.
So, these boys are causing issues once again, but I'm not getting it when I'm testing this as server. So, maybe I need to test it as client. Let me change this to server.
New window at server is climb.
Okay.
So, green, blue, red.
Oh, I forgot to push the play button.
Uh, green, blue, red. It was, wasn't it?
Yeah. So, I'm a client here.
Ah, I'm still holding it. Yeah.
And that's still going nuts. Okay, retrieving. Can I attach them like this?
I'm mad.
Oh yeah, that is bulked.
Um, at some point I will be changing the whole interaction system actually uh for pickup items cuz it it's a a legacy thing that kept around and I don't like it. I need to change it really. Um, basically all items have come in two versions. There's a world version of the item and there's a handheld version of the item. And I don't like it. It makes it a bit more convoluted than needs to be. The reason for that, if I remember rightly, was to do with physics and or um attachment places. And I think of just trying to fix it properly rather than try to work around it like I have done. So I might change that slightly, but there should still the the the stuff that's happening here shouldn't be affected by that. So let's take a look what's going on here.
So first of all, we have this interaction condition that I made for this. So, let's double check this query held item for the player character.
Um, we got an exor.
Yeah.
Let's take a look at what happens here.
Let's get rid of that guy.
Okay.
So if I attach it, it's backwards for whatever reason, right? So it stays there, but my hand is still not here, but I was able to still interact with it.
Why the break point not fire?
What?
Oh, wait. If uh did I delete?
Hang on.
Oh, no. No. Okay.
It's still quite unclear. Yeah. Yeah. I know. I mean, this is one of those objectives that I keep I'm about changing completely. Um, like I I ideally I would like to and I started messing around with it over here. I started trying to make like um three-dimensional puzzles that come into this. So rather than more like environmental like spatial ones, you cut your camera to this little mini game to solve. Um yeah, something something along those lines. But yeah, some visual would be better for this too.
Um I don't know what though. Needed to show that it's filling up with something, I guess. Don't we?
Yeah.
Yeah. I don't know.
I think I messed around with the rotation of the things by accident.
There you go.
Right. Um Yeah, maybe a floaty widget type hologram thing.
Um, yeah, maybe. Let's get it connecting first properly. Um, uh, Jordies. No, your chat messages aren't coming through for some reason.
Oh, wait. I'm on live. Sorry, I had the wrong chat open.
Sorry, mate. I realize I'm on top chat, not live chat. Makes no sense.
Um, why I switch over and equal to uh for the thing. Um uh just it gives me options later on to do other things to it. That's all. I could still equal to it. No big difference.
Uh Jord is what is the decay? The decay.
So the decay I was referring to there was when an agent or when an Android sees you or perceives you rather than when they stop seeing you, they just forget about you completely. They still remember you and basically it's like memory. It decays over time and their interest in you fades away. That's that.
Um unless something happens to sort of peak their interest again in you. That's what it kind of does.
Um, let me break down here.
Sorry, Jordies.
Yeah, I don't know why it just like stuck with like top chat, not live chat.
Weird.
Yeah, that's the thing. These things I you need to be and everyone else you need to be super obvious to people. It's really pain in the butt with these sort of puzzles. Um my junky code. So let me have a look here.
So I don't understand why this wasn't firing off here. This should be firing.
So the way this works, this is a parent a child of the parent class interactive widget. And there's this local interaction. So this is you interact with something. It determines whether or not it should interact with something or not. Um so this and the part of that is interaction condition over here going on. So maybe if I put the break point there and place it like that. Maybe I didn't either. I I don't know what that was about.
Maybe you should made a change without people knowing. I don't know.
So testing as client again.
See that should be breakpointing. Why is that not breakpointing?
So confused.
What's the exor boolean? X or is exclusively or. So or can be true when one is true, when the first one's true or second one is true or both are true.
Exor means only one of those can be true. So if one's true and the other one's true, then it' be false in general. Um, that's what exor means.
Okay. Why is this thing the only thing I can think of is that this is being overridden, but it's not. I don't see it.
Why? Why? Why? Why? Why?
Yeah. Um, that's what that means. So, that means that this has to be true or this would be true, but both can't be true.
Okay. Um, I don't get why it's not f is it? Let me just print string it then.
Make it more obvious. Change the color of it.
God's sake. Move.
Nice and pink.
True. Yeah, that's right. Don't know why the break points aren't working then.
Whatever.
See, I've now got the canister. I shouldn't have the canister in my hand.
That's returning true.
The hell?
So, it's not clearing it from my hand.
I imagine is it meant to It's meant to consume it.
So when I interact with it, place cancer should happen.
Um yeah, now I'm consuming it.
Um, that's happening cuz we're seeing it appear on the screen.
Although this isn't happening cuz the timer keeps on it just doesn't stop filling up, does it?
Um, servers authority. It should do. Um cuz we want the server to be the one that's doing all this work.
Okay. Well, I don't know why my break point is not working. Bloody hell. Oh, I know why it's not working.
So, here's a fun fact.
So, I got a feeling the reason why they weren't working, the break points, is because of the preview instance being used. So, with chemical like the chemical dispenser here, you got to drop down up here. Drop. There's all these different ones. I've got the server versions of one, two. Obviously, I want the server versions of these. Um, but I've got three of them to deal from. So, I want to know which one I'm interacting with.
So, this one is number two.
So, I need to tell it to look at number two.
And if I go back to the client. Oh.
Yep. There you go. Uh, okay. So, it is working. So, it hits that, does that, does that.
Ah, but it's not doing that bit.
And the timer is not going off.
Why didn't he get to this bit?
Okay.
Um, right.
Why wouldn't it go to there?
Okay, I need a break point in this bit.
Um cuz it looks like it's failing this for some reason.
Yep. Yep. Okay.
Unknown actor unknown class. Okay. So, okay. So, that reference is broken, right? So, this reference is stored by the parent here. So, apparently we Okay.
Okay. I know why. I see why.
Okay. Cuz this is a local one. This is being set up by the local actor, not the server.
Um, then on the dispenser that gets called over here, I need to set that to the player actor that's using this. So, I need to do that on here. Set player character Okay, that makes more sense.
Um, then play to be true. That will go.
Okay, cool, cool, cool, cool.
So, I can't see chat right now. I've got too many windows open. Uh, one sec.
There you go.
move.
Still holding my hands though.
Um, let's break point.
Uh, that So, I'm trying to get chat open on the other side so I can actually see what the hell people are saying.
There we go.
Bum bum bum bum bum.
Okay. Still not clear.
What?
Oh, yeah. I got do it there. Whoops.
This needs to go here.
Whoops.
All right, let's try this again.
The canister that be valid now. Yep.
That goes across there. Yep. Okay.
Right. Let's uh thing I want to check then is the timer. So the fire fill canister which is down here.
Okay, it's firing off but it still does the nonsense.
Why would that still fire off when that is deactivating it? Again, this only happens on the client. The server side doesn't do this problem.
So we're multiccasting place canister.
Uh I know I know I know. So the reason problem is that this is multiccasting place the canister. This is the server doing the timer only.
But then the um this means it only happening on the server side not the client side. So this we need to have a multiccast event to call this thing.
So custom event multiccast fill canister connected multiccast that call this fill canister.
I guess I don't actually need I could just do it like this actually.
I think it lets you do it as a timer.
Yeah, I think I think it will.
Yeah, multiplayer stuff always fun, right? Let's see if that works.
Epoxy chest. All right.
and put that in.
It goes there. Stops retrieving.
Okay. So, now the retrieval bit's broken, but getting there.
So, back on here. Retrieval. So retrieval is on interact. We get the player character. If it's filled, it's true.
That means it goes over to here. We're spawning the held canister and telling the character to pick it up.
Okay, so it's not getting this far. So is field is maybe not true.
Should be, but it's down there. It's true.
Uh break point.
Oh my jeez.
Okay, that should be false. Yep.
Okay, and that now should be true.
True. All right, good. Spawn the actor.
It's still on server side, so it's fine.
Always spawn.
Uh, let me go back to here.
Yep.
Yep.
But then it's not hiding that.
But I guess that's why it's not server side. That's why. Okay. Just need to make this more um multiccast out. Um basically I need to clean up this whole damn code. Uh, although it should be in my hand. The server's doing this, so it should be put in my hand. Pick up item.
Double check this.
Not holding item, which they're not.
Director comes through.
Let me test that.
I saw a question there. What was it? Um, what's the difference between ROS and multiccast?
ROS. What's ROS?
Oh, replicating server.
So, replicating server means only the server does it, but you can only call that from a owning client. Now, all these objects in the world are owned by the server cuz they're they're part of the world. Um so only server can really control them. The multiccast the server can again be the only one that can call that one but they will tell everyone to update and do the same thing.
Okay, cling server doing that. Good that and it should give me a client call as well which is not. So I imagine then on my server view.
Yeah. Okay. Holding it.
Okay. So the pickup isn't working correctly there.
Um I swear I made it.
Figure that out. Hold on.
Uh the servers one tending to pick them up.
So, like if I look at any of these things on the floor and go to the world parent one event graph server call interact with uh yep pick U ah wait I don't know if it is the actor actor player multiccast pickup item that's what I meant to call multiccast pickup item.
Yeah, that's that's what I want to do.
So, chemical dispenser. It's not that one.
It is uh get player character multiccast pickup item.
There we go.
Trying to service the first. We know it works on the server. Um, it's just the client that causes the issue.
So, let's pick it up on this client.
retrieve it.
There we go.
And then drop it.
Pick it up.
The UI is busted. It still says I'm still holding something, which I don't.
See that little bit in the corner?
But it does mean I can pick it up.
Ah, but it's not clearing out. Okay.
Yeah, cuz I didn't multiccast that part.
That's that hidden game bit here. This part is not multiccasted out. So that um can I just do replicates?
I don't know if I can't hidden game replicates as a function. We'll find out. Let's learn together.
hand if it did save me doing all the functions for it.
Cuz the way it works is those cameras are always on there. They're just hidden. Yeah. No, don't. Um they're always hidden. So, um yeah. Uh, we just take the hide or show based upon what it's doing. So, I just need to do um could I do a So, you got multiccast place canister.
Basically, want to do multiccast remove canister. I don't know.
So, put it underneath it. Multiccast.
Remove canister.
I'll make this more efficient in a second. Uh, multiccast there.
And we'll just put the canister.
Yeah.
Let's see it works and I can make it a bit more efficient.
Dude, Damn you. Oh, didn't I? I didn't park in, did I?
[ __ ] idiot.
Don't deying.
There we go.
and drop on the floor. Pick it up.
Nice. Done. Cool. That's a lot better.
Cool, cool, cool, cool, cool, cool, cool. Right, let's make it more efficient. So, it all works. So, we just need to make it clean up a little bit.
Um, multiccasting is a lot more expensive to do if we can avoid doing it. So, what I'm going to do instead is use on rap notifiers. They're a lot more efficient. So, what I'm going to do here is have a a uh a verb in here for um is canister attached as a boolean. I'm going to change it to replication on rep notify.
So, when it gets changed, this changes.
So it gets called for everyone. So I'm going to put that over here like so. And that'll be part of that.
And that'll be an opposite of what that is. So it's attached. If it's false, I want that to be true.
Yeah, my chest is messed up. It hurts like hell. Um, is mobile casting a problem with something which happens so infrequently? Like literally Nah, no, it's fine. It's it's just it's it's more of a B it's a bandwidth thing. Yeah. So, you're just sending more bandwidth uh with a multiccast. It's cheaper to do it as a rep notify and stuff like this is simple to do notify as you're seeing here. Um, yeah. So, I'm going to do that like that and then that that'll handle that. So I that saves me doing that that I can just do that there. Now this is important though. Only the server can make it work. If you the client tries to change it, it won't do the multiccast part. So yeah. Um and we've got that also going on here is place canister is attached.
So this part I'm going to also put on there. So um that is going to attach here. We'll set true I think I set one to true. No, that was maybe false. Um there. So this part I now need to be another one. So I'm going to take this and cut it. Put it over here. But this is only going to be happening when this is actually attached. So put into a branch and if it's attached we activate the noises and things like so and um so multi cars place cancer now doesn't need to be existing.
It's a little bit nicer.
It's not that. It's a It's a chest infection. I need to go I've had antibiotics. He hasn't done nothing though. I need stronger antibiotics.
Uh okay. Uh anything else I can do? So, a field can. We probably make this a bit chiller with this field one here. Change this to be a rep notified one as well.
So, we'll change that to be rep notified.
Uh, rep not. I guess I don't really need to because the problem is that this needs to be happening on a timer. Um, and you can't call obviously a variable um as a as a timer. But maybe just for cleanliness and make it a bit nicer. Um, yeah, let's do it like that. Let's change that to rep notify and all this stuff. Here is who right there. That'd be not replicated at all.
Like that.
So that causes this. If I want to make it a bit tighter.
There you go.
And when it is filled, um I want to do this part.
Here the current coolant combination that is replicated already. That's fine. the value for this it would be the value of the uh whole chemical dispenser. So that is fine too to be like that.
So that makes that a little bit tidier like so. What's all this stuff?
Uh well that's not plugged in anymore.
So we probably get rid of this um on canister removed. Well, we already got that as a rep notifier. So, what I could do is I can put this on. Actually, is this actually being used at all? Hang on.
I don't think it is.
Stop. any of that's being used.
That's deactivating. But we are doing it elsewhere. I think yeah, doing it here. Doing it there. So, I don't actually need to do any of this. This is old hat.
Okay.
So this I can put inside my server block.
Put that there.
Oh, broke it.
Oh god sake.
Go.
Okie dokie.
Right. So that let's just test that is working as it should still even with those changes.
Should just be a lot more efficient and cleaner code too.
Let's get the code right. What's the code? Uh red, green, blue.
There's red.
There's green.
And there's blue. Cool.
Yeah, it's just an animation.
It's just looping animation. I don't know what I was doing. I thought I was just testing animation stuff.
H.
Okay. So, coolants are functionally working. I know some weird UI things, but I'm going to fix that anyway when we rejig the UI of what's going on over here. Makes a bit nicer, a bit cleaner to look at and make use of. Um, yeah, I probably have to just redesign the model of the canister to make this look a bit more clearer. What colors are actually in it or textures of it?
Let's design a UI for it.
Um, we go have to game play. Um, I'll just put it here for now. I'll fix it later.
I'll show you something cool you can do as well. Um, so I'm going to make a material for this thing.
Um, uh, yeah, I still want UI. Let's go to materials.
My mess of materials here.
Uh, we do semicircle.
change it to a user interface and make it translucent.
So I'm just going to make a semicircle bar like a pressure gauge type thing.
And what it's going to be I'm thinking it'll be the colors are like whatever color order you put you've put in there.
So do that 0.5.
Radius here with 0.5 as well. Hardness we'll do is 100.
There's our circle. I want to get the bar of it. So, I'm going to take that and reduce this radius here to 04 five. I don't know. And subtract that from the first one. Maybe a bit more than that. 35.3.
Yeah. 3.
Okay.
And I'm going to cut it in half. So when we do that is I'll take the texture coordinate node. So I'm doing all this without doing a single texture call. Uh that's the benefit of doing stuff like this in materials. It saves me doing a texture call which is another expense you don't want to necessarily have and don't need to have really. Um so I'm just going to mask this. I just want the vertical part of this uh UV. So I'm going to take off the R. Get the G. I'm then going to step that by 0.5.
That round up everything above.5 to one and below that to zero. There's our mask. Multiply it by that.
And we get a semicircle.
Tada.
Okay, that's our semicircle. We now need to break it down into uh segments. So, we've got three segments of it.
And for that we are going to um put in the another coordinate node and subtract from it 0.5.
And that what it does it will shift the center point from being the top left which you can't really see. There you go. From the top left to the center point there.
And from there I can do rotate.
And we'll do um uh uh uh uh uh rotate vector. No, we want vector to radial.
Radial vector. There you go.
This thing returns this sort of shape uh from that center point.
take that and then I'm going to multiply that by this and we get the RA gradient over there.
But I actually want the gradient to actually be different. I want it to actually be uh zero on one side of things and it'd be easier to do a calculation if I had zero from there to there. So what's going on here? value the white is one goes all the way around to zero which is the black there. So if I want zero to be up to here I need to take away from here. So if I took this and sub subtract from that uh 0.5 we get that sort of thing. So that's zero there that goes from like uh 0.5 round to zero round to z uh negative.5.
So I want to get rid of that negative.5.
So I'm going to clamp it.
Still it will look the same. But now the zero, the black bit underneath here is all zero, not negative values. Which means I can now take this value and multiply this by two two. And that'll ramp it back up again.
So now we're going from one uh there round to zero there. And I can multiply that now by our mask to get that.
Okay.
And now I can step it cuz I want it broke into three steps here. So if it goes between 0 um so uh 0 and one if I want to step that I just step 0333 wait third we get that obviously no right I want that uh on that value.
Uh let's just clamp it first just in case some weird wild numbers out there.
step 333.
Maybe I have to do the um the masking before this part.
So if I did it from from there maybe why is it doing Oh, no, no, no. That is right. That is right. I'm doing the wrong I'm doing the wrong number.
Um, yeah, I'm doing it uh uh what I do. I'm going to step that to 0 uh 666 to get that little section there. One minus it.
There we go.
Okay. So, now we got that section. I want to now rotate it.
Okay. Um, now to rotate this thing, we use a custom rotator.
And these are going to be my UV coordinates I'm rotating around. And so we're using all these UV coordinates here, there, and everywhere. The only ones that really are important are probably going to be these ones probably.
So we can probably just do this in here.
I may be wrong. We'll try in a second.
Put in there.
Rotation center, that' be 0 5.5.
And the rotation angle here we'll put in as a scalar.
And that should be point like third basically 333 666.
No, hang on. I've definitely got that wrong.
Uh, it might be the C rotator on the other side. Hold on.
I need to rotate it before I subtract it.
Uh, it's rotated better.
What am I doing? I am currently doing a um semicircle bar broken into three segments without using a single texture if I can. If not, I'll do it as a texture. Um uh but I want to divide this by two cuz it's a semicircle. So take that divide by two.
There we go. So that's 666.33 and then zero.
Smashed it.
Yeah. Nice, nice, nice, nice, nice, nice, nice. And we can make that even a bit tighter, too. Um, I can make a scalar value in here.
parameter and we call it segment index.
So that be one, two, three. And I'll just multiply that by 33 33 333.
Throw that in there.
So index zero be like that. Index one, index two. Nice.
Um, ideally though, I want the other way around. I want index zero to be the left hand one cuz we read left to right don't we? So I want to do the invert of this.
So if I want to do the invert of this um well I could I mean I could do it here.
I could rotate the whole entire bloody thing but it might be just easier for me to say um when this is zero I want it to be three.
Uh when it be two when I want it to be uh actually no I do need to flip it.
I do need to flip it. Um [ __ ] Um bum bum bum bum bum bum bum.
Multiply that by negative one.
That's going to break the the other coordinate. I don't want I only want in the x and y. So hang on. If I do multiply by and put in a two there, put one uh one there. I only want to change in the x.
So x is negative one.
No, I don't think that's going to work.
Uh, I could remap it, I guess. Remap value range.
Yeah, do that. So, put in two values here. Um, probably be the easiest way of doing it really.
So, input low and higher. So input low is zero, high be two, output high, low will be two, and then zero.
So zero, one, two. Yep. Nice. Nicely done.
Oh yeah, iron. You go, right. Yeah. Map range. There we go.
Um, show all of it to everyone is bad. By the time you fix everything, there will be nothing left to show. Oh, there'll be tons to show. Don't know.
Barely scratched it.
Um, okay. So, that's that thing done there. So, we'll do the image. Oh, wrong bit. Image.
Throw that into here.
There's our bomb.
Okay. Um, I'll wrap it with a size box as well. Yeah. I'm going to show you something cool that you may not know about. So, I'm going go into here and do uh let's do uh 100 by 100.
It might need to be bigger. We'll see.
Right. So, we do that. Um, and take one of these canister meshes. One sec.
Uh, no, not that. Go away. Go away.
Right. And go into modeling mode.
And in here, I'm going to pick the model poly groupoup edit. And I guess it's all one thing. Yeah, that's fine. We'll just break it apart. So, attributes, generate poly groupoups.
Uh, sure. Do that model poly groupoup edit insert edge loop and we'll say we're going to put it uh put on the magic on the back here.
We'll go there and there.
Done.
And I'm going to select that face, that face, that face, that face, that face.
Yeah, do that. And then I'm going to uh duplicate that bit. Accept that.
Whoops.
A crap.
Ah crap. Do it again.
Done.
Do that.
Yep.
Yep. There's our faces. That's what we want.
Right, let's put that back.
And I'm just going to um uh what would be a better way of doing this? Any if I turn on snap. Hold on.
Uh location snap.
Sure.
Do that.
Um, actually what I'll do is bring it down to one, I guess. Actually, no, I don't actually.
I don't know.
Oh, why didn't it keep merge loops?
Done.
Oh, yeah. Except there. That's why. Uh, okay. Yeah, do that. and go to here and we go to edit materials and I'm going to make a new material.
Change it to active material and I want to select uh by poly groupoup if I can. Hang on.
Clear that holding group.
Uh, no.
Clear.
I guess it does mean poly groupoup. Hang on. Why can't I pick that poly group color?
Oh, hasn't Oh, I didn't generate a separate poly groupoup. products.
Um, hang on back.
Oh, no. Play group edit.
Uh, could you not make it a separate play group like manually?
Uh, it's not a big deal. I can just do it. Um, just do brush. Just take brush size.
a bit bigger. Do another section.
That'll do. So, I'm going to set that as the new material. So, I'm going to change that to active material to none and assign active material. Done.
Accept. So, we got a blank material here.
Now on uh um I'll just do it here I guess with next to the actual mesh. Um add a new material m um gas widget like this. And we're going to make a new texture for this as well. So, I'm going to go to uh where am we going? Texture render target gas and go in my material here. I'm going to assign that texture to there.
Whack that on to there. That'll do. I'll try the best later.
and then assign that to that model.
Okay.
Now, what this will do, what we will do now is if I made this uh if I go to the actual Hold on, I edit the actual one in here.
There you go.
So now if I go to the canistered uh actual blueprint in here, you can draw a widget to a texture.
So you create widget.
Uh this is on begin plate. Yep. We'll create our gas. No, what do we call it?
Uh, no. Can't remember what we called it.
Canister widget.
Canister widget.
Um, and then from here we then draw uh no, what was it called?
I forget the value function. Draw widget. No widget to render.
Can't really think it's called now.
Oh, I can't remember what anything's called now.
You can draw it to texture. It's how you do things like books with pages that move target.
No widget render.
How the player is it called?
Unless it's actually on the widget, although I don't think it Those no draw as an actual texture. Hang on. say you draw um I say I've done it with a book.
Oh, that that was it.
Um.
Um.
No. Hold on.
Draw material to render target. That's the one you want to use.
Um, texture where the target is your RT whatever you want. RT uh gas squid.
Um, pardon me.
I don't think it's just that. Nice.
Draw widget to target. Draw widget.
Why is it not coming up?
I don't load up my project to do it.
Ah, I know why. I know why. I know what I'm doing wrong.
Oh, I know. So, the gas canister, you have a widget component on it.
You set it to your widget.
Um down there.
Okay. Sto widget. There you go.
Obviously get to size you actually want it to be.
We just scale the rest of it like that.
It doesn't matter really very quick.
We're going to hide it in a second. But you take that and you're going to render that to this curved material. So on the event graph, we take this out. So it's not create widget, it's this um render uh get render target and put that as the uh No, hang on.
And that's Yeah. And then you get the material. And then you do um uh the material uh stuff. Hang on. Uh create dynamic material instance.
Choose the source which should be what I call it canister.
No gas gas widget.
Promote that to available widget material.
And then we do set D uh set texture parameter value widget and then put that in there.
Yeah, that should render on top of that.
And I should be able to hide this. I won't hide it straight away. I just want to see if it works. Uh, just move to the side like that. I can go back to one player now.
Oh, I didn't apply it. Whoops. Um, on event graph. Then we set the widget here. Not widget. Set the mesh.
Set um set material.
Uh and it's index one.
It's looking like it's all black. Hang on. Wait for the the thing to go. Is it all black?
Why has it gone all black?
Okay.
Uh, wait. This version is 5.7.
I'll get the wrong one. That's why. Next one.
Whoops.
Okay, still not doing it.
I have to look how I did it in my book.
I did I did a book uh thing for someone once and did it for that.
Um, get material set to widgets.
It's called widget.
Okay. Render target.
Let me double check I've got the right thing.
You have to look at what I did cuz you can definitely do it.
Must it a tick box I have to turn on here?
It has to be a screen widget maybe.
Let's have a look.
Don't think it did when I last did it.
Yeah. No.
Don't know. I think I have to go dig up my other project. Can't what it was in there now. Um Yeah. Yeah. Just need to be a surface material.
It's just not uh unless the texture needs to be a certain type. Let me double check.
Um let's try linear color might get weird.
Um, no. I guess not.
Let's see if it if I put in like another texture. Guess it overrides it properly.
Oh, wait. Did I Ah, I know what I didn't do. Hold on.
Um, if I go to UVs, I didn't do the UVs for it. Um, I want to edit UVs.
It's not going to work cuz I just want to edit just that poly groupoup. Um, no, no, no. It's going to mess up everything else. Um, if I go UV editor, maybe we can do it from there.
No. Ah [ __ ] Um, it's cuz the UVs are wrong.
Oh.
Um, so don't break it completely. I'm going duplicate it and then mess around with it. Um, poly groupoups.
I know we determined it wasn't a different poly groupoup, did we?
Um, yeah. Don't like that.
Oh, if that's all of it. That'll do.
Accept that. No, it didn't.
Um, will it be like that? Hang on.
Easiest way to see.
No.
If I go to Yeah, there you go. It's one poly groupoup.
Okay, so it has detected as a poly group. That's fine. So I can select that.
Um I want to auto UV just that one. So, project UVs there just for that. There we go.
And I need to rotate that around 90° and scale it as well. Actually, let's get it mapped properly like that. And Try that out.
That's not right in the texture to it though. Still uh that's one for me to go back to my other project and have a look to set correctly. Yeah, it should be still a surface.
Not do anything crazy.
Uh, I'll I'll investigate. I'll have to dig up my other project, the ones I done with the book. So, I think there's a book that turned pages. The pages obviously animated and flapped over. I kept it painted onto it. Um, yeah, yep, yep, yep, yep, yep. Um, oh wait, that's a Oh, hold up. That w the actual thing.
Hold on. Uh, no why it didn't work.
That's just the mesh.
I just need to use that mesh though.
Copy.
Paste.
No, I still know. All right. Am I I I'll dig it up. I'll look at how I did it.
But that might be an idea. Doing like some sort of meter on it that animates and moves. Um or as you saying like some sort of holographic thing like we've done with the doors possibly. I don't know. Something to explore. Um but we fixed the gas canisters. That's good. Um the off my list. Hold on.
Uh yeah, and fire extinguishers noises aren't working greatly. That's an easy fix.
Um sorry for that one when they're being shot.
We are spawning a sound effect somewhere.
audio. What's it doing here? Um, local only. Oh, it should be. Hang on.
Yeah. Uh, I I hear like another sound being played then. Maybe it wasn't this one. Maybe something else.
It just turns it off and on.
Um, did I put on the hog effect? Is that what I did?
Nope.
Let's check the gas cans. Take a look at those audio here. Oh, yeah. Uh yeah continuation local only that's fixed. Nice being on lit mode. No no it would be unlit mode that cool. All right. Fix a number of issues.
Uh nice one.
Cool, cool, cool, cool, cool.
All right. Um, we'll call it there. It's getting late and I barely breathe face this damn chest infection. Uh, but we'll uh be live again tomorrow, I believe, for questioning time. So, if you have any questions with Unreal Engine related questions or game dev related, maybe you want to know more or ask opinions about Unreal Engine 6 or something, come along tomorrow. Uh, we'll do a live stream tomorrow night asking all the question, answering all the questions we can right there on the stream. Uh, hopefully by then I'll figure out what I did wrong with this bit. Um, oh, I'll dig it up.
But, okay, have a good evening everyone and I'll see you all tomorrow. Bye-bye.
Heat. Heat.
関連おすすめ
OpenHuman VS Hermes AI: Who Wins?
JulianGoldieSEO
285 views•2026-05-29
Long-Running Agents — Build an Agent That Never Forgets with Google ADK
suryakunju
142 views•2026-05-30
5 Mind Blowing Omni Uses Cases
PaulJLipsky
1K views•2026-06-02
This computer is made from real human brain cells. And you can buy it.
Talktmsmedia
3K views•2026-05-28
BREAKING: Microsoft’s New Image Generating Model Beat Out GPT 1.5 and Nano Banana 2
aimmediahouse
122 views•2026-06-03
I Made the Same Anime Fight Scene in Every AI Video Generator
NobleGooseAnime
295 views•2026-05-30
Nvidia Bets Big On AI PCs | New Chip To Power Windows Laptops | Technology | AI Updates | N18S
cnnnews18
3K views•2026-06-01
I Tested NEW Opus 4.8 on Four Projects (Updated LLM Leaderboard)
AICodingDaily
298 views•2026-05-29











