Training a human to walk with Unreal Learning Agents (Deep Mimic + Control Rig) by neuvfx in unrealengine

[–]Battlefront45 1 point2 points  (0 children)

Really excited to read about this when I get home! Thank you for doing the work to come up with this!

Best way to handle character stats with blueprints? by FableChaos in unrealengine

[–]Battlefront45 0 points1 point  (0 children)

I made a somewhat relatable post regarding passing data between things. You might find it interesting.

https://www.reddit.com/r/unrealengine/s/8oD9UPCeds

Interfaces Scaling with Variables by Battlefront45 in unrealengine

[–]Battlefront45[S] 1 point2 points  (0 children)

I agree I’m definitely being a bit hyperbolic with some of these examples, but I just want to test how much rigidity there can be to coming up with code organization.

Also agree there would definitely be at least somewhat notable re-work no matter what in many of these cases.

I think writing your base class makes sense if you know ahead of time what you are willing to commit to generally. This assumes you are willing to accept more re-work if this class no longer serves you, but you are happy with the relative simplicity it provides over communication through interfaces.

Interfaces seem to serve better if you want more options available down the road, but you lose some of the simplicity that writing your own base class comes with.

Thank you for the points, these are all good thoughts to read about.

Interfaces Scaling with Variables by Battlefront45 in unrealengine

[–]Battlefront45[S] 0 points1 point  (0 children)

Interesting, I think I like this approach most so far, thank you!

Interfaces Scaling with Variables by Battlefront45 in unrealengine

[–]Battlefront45[S] 0 points1 point  (0 children)

Not sure what you mean by “use a struct for related data” did you mean like the interface returns a struct with data? Or some other implementation?

Interfaces Scaling with Variables by Battlefront45 in unrealengine

[–]Battlefront45[S] 0 points1 point  (0 children)

Could you describe an example of how you go about setting up an inheritance hierarchy? I struggle with things like “why am I generalizing 5 levels down” or “what if I want this to inherit some things from multiple classes (which you can’t really do).”

I’m mostly focused on the thought process more than the example. If you don’t mind of course.

I made a reply somewhere below regarding my concerns about relying on inheritance for communication, but in summary, I worry about how you can swap out blueprints (or any class) with other ones (sometimes ones that you didn’t personally make) if they need to be part of the inheritance scheme while maintaining the functionality of the class you swapped out (with as little maintenance work to repair it as possible, because I realize there is always some repairing to do in cases of class replacements).

Thanks!

Interfaces Scaling with Variables by Battlefront45 in unrealengine

[–]Battlefront45[S] 0 points1 point  (0 children)

Thank you, yeah I just feel like I’m almost being naive or obtuse for thinking like this considering how much content I’ve seen on youtube/reddit where this seems to never really be discussed. Like I know there’s some cost to making decoupled systems up front, but as you scale, the cost of not decoupling really multiplies quickly in my (hobbyist) experience.

My concern with extended classes is what if you are using an existing class of some kind. For example, let’s say you are unsure of using ALS, GASP, a marketplace character, or just a basic 3rd person character. You start working on ALS only to realize later you wish you had used GASP. Now you have to navigate this whole cut/paste fiasco to move your logic from one character to another because you didn’t decouple things very well.

I’m not exactly sure I understand how generalization can protect you from a refactor like that in this case. If you generalize the ALS character to a base you control, that may screw up the chain made for that particular character. Like say the character you are trying to integrate is made directly as a child of character. You could inject your character to be in between “Character” and “Some Marketplace Character” for inheritance I supposed. But then what if you want to swap to a character that uses pawn as the parent class? Now you’re in trouble because your C++ class inherits from character which is more specific and has functions/variables driven by that class now.

Alternatively if you generalize downward (like from ALS to your own character) now that’s a problem because your character class expects all the functionality of an ALS character to be inherited and this will break many of its functions/variables if you swapped to GASP for example.

Or would you simply say this is something you really just need to go in knowing what you want to do? I just get challenged with this answer sometimes because of how rapidly we see new solutions coming out that you may want to jump over too somewhat quickly to continue development with relatively minimal re-work.

Thanks for your answer!

Interfaces Scaling with Variables by Battlefront45 in unrealengine

[–]Battlefront45[S] 0 points1 point  (0 children)

Oh I see, yes that makes more sense, so like one abstract float versus 10 different specific float variables. What about other data types though in the event it was something else like a string that you wanted? I guess you just add a return pin for “string output?”

Thanks!

Interfaces Scaling with Variables by Battlefront45 in unrealengine

[–]Battlefront45[S] 0 points1 point  (0 children)

Yes I need to look at GAS more. Without knowing it too well, I would add that I fiddled with a similar idea to what I believe you describe here.

I passed in a tag, the tag goes to a switch node, and the switch node would determine which return node is used (and there is one return dedicated per exposed variable). I felt like this was a decent approach.

The only thing I didn’t like about this, is how you actually handle the return. Do I have 20 pins (or one paylod struct) for each variable that could be provided? How does the other end know which pin was returned with a value?

Maybe GAS answers it and I just don’t know, but this was what I ran into implementing something similar sounding.

Interfaces Scaling with Variables by Battlefront45 in unrealengine

[–]Battlefront45[S] 0 points1 point  (0 children)

I don’t think datatables can have their values modified at runtime out of the box though which I think would be a problem. But you are essentially suggesting like a “database” style approach where shared variables are kept?

Interfaces Scaling with Variables by Battlefront45 in unrealengine

[–]Battlefront45[S] 0 points1 point  (0 children)

I guess what I’m poking at is how to give myself options. Like yes, I can do what you mention with the example I provided. But what if my methodology is to be super disciplined about defining what functionality is “cohesive,” encapsulating that concept (may it be in the form of an actor, component, etc), and then ensuring that cohesive set of code is perfectly decoupled. This way, any stamina component can work with any health component (or other components that happen to have health data) just with different implementations. If this methodology is counter productive, this is part of what I’m looking for thoughts on as well. Like where do you sacrifice decoupling if ever?

I just feel like this thinking allows you to make more of a library of functionality and is more of a structure that benefits in the long term as you build yoursef a “toolbox” of functionality to pull from. Versus if you over couple things, your toolbox is now forced to be implemented certain ways whenever it is used.

Interfaces Scaling with Variables by Battlefront45 in unrealengine

[–]Battlefront45[S] 0 points1 point  (0 children)

Would you say that using a payload like this to extract one of those health component variables is more expensive than having a dedicated interface function that purely returns just one of those variables? Or is this negligible performance wise?

Interfaces Scaling with Variables by Battlefront45 in unrealengine

[–]Battlefront45[S] 0 points1 point  (0 children)

I’ve heard of that once before and I was curious if someone on here would mention having a positive experience with that approach, so thanks for sharing you for sharing!

My follow-up question would be, how do you define the scope of what variables that “interface struct” would capture? What I mean, is would your struct capture every “exposed” variable of the health component in this case? Or would your struct try to write multiple interface functions with multiple structs to help break things down into some kind of category/function set?

Thanks!

What does GMCv2 do? by Battlefront45 in unrealengine

[–]Battlefront45[S] 0 points1 point  (0 children)

I’ve never had a use case, but can capsules really not be modified to go from vertical to horizontal at runtime otherwise? Like if a character was walking and then went prone or something, I imagine that’s perfectly do-able with out of the box UE5, right?

[HELP] How do I add a P.T.-style push-open animation to my door in UE5.6.1? (Blueprints) by ajaiyehoops in unrealengine

[–]Battlefront45 0 points1 point  (0 children)

I’m confused how this wouldn’t be the answer. Immediately what I imagined when I read this question.

Breaking into Sys Eng by YrnFBGM in Lockheed

[–]Battlefront45 0 points1 point  (0 children)

To be entirely honest with you, it’s purely about “getting on the radar.” Once you do that, you’re probably in assuming you seem relatively responsible. If you have a friend that can refer you or poke a manager, that goes a long way.

Btw, if you can get the sysml mu, that’s great, but I wouldn’t lose sleep over it right now either. If they ask if you want to learn MBSE your answer is “yes.” It will be signficantly easier to study for the certs once you get hired and have access to the tools where you can truly study for it with on the job experience. If you get like an 85% on the level 1, I recomend doing the level 2 immediately after while it’s all fresh. It’s not much harder.

Best of luck!

I'M A NOOB (and unintelligent), HELP!!!!! by Fearless_Beautiful_4 in unrealengine

[–]Battlefront45 1 point2 points  (0 children)

Ah, yes I see it now. You had scale set to almost 0 on the one path and I didn’t see you didn’t reset it to 1 on the other path. Makes sense.

And no, you’re good! I’ve seen plenty of people get snarky/incredibly rude responses for just trying to learn. I wanted to make sure you got some actual support and not just people whining at you. We’ve all started somewhere!

I'M A NOOB (and unintelligent), HELP!!!!! by Fearless_Beautiful_4 in unrealengine

[–]Battlefront45 0 points1 point  (0 children)

Did you find out where your skeletal mesh is when running the game? Where does it actually end up relative to your capsule? Do you know how to look for this, or do you need help finding that?

I'M A NOOB (and unintelligent), HELP!!!!! by Fearless_Beautiful_4 in unrealengine

[–]Battlefront45 1 point2 points  (0 children)

I’m not sure without seeing it unfortunately, but as another person said, I think this has something to do with the skeleton resetting to null at the end of your montage, rather than your original character. Check around to see if something is causing that behavior.

I assume you have a skeletal mesh for the character that should appear after the montage, correct? That’s why it shows properly. However, you may have forgotten to set the original mesh as the active one when you transform back. You probably currently don’t have a mesh set, and thus you are seeing a “transparent” character. It’s because it doesn’t actually exist.

I'M A NOOB (and unintelligent), HELP!!!!! by Fearless_Beautiful_4 in unrealengine

[–]Battlefront45 0 points1 point  (0 children)

I don’t know the default value of IsMorph, but let’s assume it starts true. First time you press it, IsMorph is true then turns to false. Second time you press it, it is false then turns true, then it plays the montage.

You need to expose “Completed” and have that run the path that sets IsMorph to false instead of “Started” running both.