Unreal Engine 4 (free!)

xzi

Mouthbreather
7,526
6,763
What is Unreal Engine 4

So, I guess Unreal decided to take off the 19$ a month to use their full engine (which was already a deal) and have released it completely free. All perks included.

We give you everything so you can build anything. You get all tools, all features, all platforms, all source code, complete projects, sample content, regular updates and bug fixes.
There is the usual 5% royalty on shipped games after the first 3,000 revenue per product per quarter, which isn't bad at all, but the important thing is that it is now FREE. UE4 has been something I've been eyeballing for a while now and I'm absolutely stoked about it. Whether I ever plan to release a product or not, I can't wait to dick around in this.
 
  • 1Like
Reactions: 1 user

Kharza-kzad_sl

shitlord
1,080
0
I've been messing around with this in the past few weeks, an hour here and there. I decided I should probably learn Unreal and Unity both, but decided on Unreal first as an old friend of mine works there.

To put it to the test, I decided to use it for Ludum Dare. So that friday night I loaded it up after I had an idea for a game and started off with the top down sample. I was going to do something click-to-move. Within 10 minutes I had a little man running around and pathing. Everything was very slick and I only had one crash that weekend.

The first thing I wanted to do was bind a couple keys to turn the camera. So I googled around and found where to do that (axis bindings) and set them up, hooked them into a blueprint with a keypress * deltatime and rotated the spring arm thing the camera was attached to. Nothing happened.

I tried a few other ways and still got nothing. So I started digging around looking for debug prints and such to try to figure out what was going on. Over the next few days I sunk about 20 or 30 hours into trying to do my very first task. Turn a goddamn camera based on a keybind. The frustrating bit is, I could write an entire camera system from scratch in less time than that.

Eventually I ended up getting the source, and after some seriously painful compile times found the problem. Axis bindings were just broken in their code. I updated to 9.1 and someone had already fixed it.

So yea not off to a good start. This is typically how it goes with me and middleware. I've had to use it throughout my career and it has always been miserable.

So yea if you start using this, get the source. If stuff is broken, you can at least dig down and find it. However there are many caveats here:

As of right now, some of the build targets don't work as advertised. "Debug Editor" is supposed to be debug engine code + debug game code + uncooked data. Right now only "development editor" works with uncooked. I went in and manually edited a bunch of stuff and eventually got debug editor to behave, but I couldn't even begin to tell you what I did because...

Build times are absolutely awful, AND it will often rebuild the entire goddamn engine for no reason. The docs warn it could be 10 to 30 minutes, but it is 2 hours + on my machine. I still have no idea what causes this but usually if you use the right click BUILD ONLY THIS thing, it won't flip out.

Intellisense goes completely apeshit on this project. I have 8 gigs of ram and when my machine slowed to a crawl I opened up resource monitor and saw 7 instances of the intellisense stuff all eating around 800 megs of ram. There's a setting you have to change otherwise it will go far far over your available ram and your entire machine will seize up. Keep in mind visual studio has patched twice for just this issue. I can only imagine how bad it was before.

Visual studio 2013 is just an enormous hunk of crap. It can't cope with the size of this project. As I type this it is sitting completely frozen spawning instances of vpkgsrv over and over eating 4 gigs of ram. I right clicked on FPlane and hit go to definition about an hour ago. I went to make tea, did various stuff around the house, came back 30 minutes later and it was still going. All it had to do was open plane.h! So I hit cancel and it has been frozen ever since.

The build system is annoying. They have this gigantic convoluted build system with lots of .cs config files that is completely overcomplicated and unnecessary. Simple things like adding in a library is a gigantic pain in the ass. I wanted to pull in a pathfinding library I made and after fighting it for a day I just gave up and put the source directly in my game project.

Having said all that, and keeping in mind that I pretty much universally hate all middleware (especially since there's usually little it provides that I haven't already written myself), there are some good things:

The editor is really really slick. If you are using blueprints, the graphs make sense and work, and there's even a sort of debugging. Everything is snappy and responsive.

C++ integration is super good too. You can actually debug launch the editor from within visual studio, then create a new C++ project from within the editor you are debugging, and it just automagically works. You can add classes via the editor, and compile. It has a psuedo faked reflection that pulls in variables from the C++ classes and makes them editable. Really nice stuff.

C++ is really slow to write stuff with though. It has been awhile since I used it, but over my life, I've written more C++ than anything else, so I guess it is my primary language, but it is just really slow to get stuff done in. Some modern language features like events are done with horrible macro hackery in C++. To use something like that you basically HAVE to have an example to look at. There's no way in hell you'd ever figure out those templated macrod monstrosities. Like gazing directly at Nyarlathotep.

Anyway, just thought I would share. Time to end task visual studio I guess.
 

Noodleface

A Mod Real Quick
37,961
14,508
Kind of been thinking about giving this a shot.

Not sure if I should try Unity or UE4. What do you prefer to a game-making noob? I'm a software engineer so not worried about any languages involved.
 

Tenks

Bronze Knight of the Realm
14,163
606
The only thing I disliked about UE4 is I had to install Visual Studio as well. I thought Unity came pre-packaged with an IDE.
 

Noodleface

A Mod Real Quick
37,961
14,508
Well I already have VS, so that's not too bad - although I fucking hate it.

I much prefer just using an outside text editor anyways. Atom is pretty spiffy.
 

Kharza-kzad_sl

shitlord
1,080
0
I much prefer just using an outside text editor anyways. Atom is pretty spiffy.
I never understood this until I got 2013 community. The horrors I've witnessed over the last few weeks... It reminds me of my very brief time using Eclipse on an ancient dell.

Visual Studio used to be fantastic. It was the only decent thing microsoft made. It was sharp and snappy and stable, and had excellent workflow and keybinds. Things started to go downhill with 2008 when it got just a little bit piggy and sluggish. Then 2010 got VERY sluggish. I think they quit using native for it? 2013 might be great if you have 32 gigs of ram, which I'm hoping to score around black friday, but on my 8 gig old machine it is just unusable.

It still has the best debugging out there, but intellisense needs some big help from a performance specialist. I guess part of the problem is that complex C++ is hard for intellisense to figure out. I've got some C# mixed in with my C++ and the C# stuff has very snappy intellisense functionality.
 

Kharza-kzad_sl

shitlord
1,080
0
On Unity, I've not tried it yet, at least not any recent build. Unreal so far has been very familiar. There are things in the code that are very much like my own set of tools I use. They've got the usual axial bounding boxes and good vector libraries and plane stuff. The pathfinding stuff works pretty similar to the pathfinding I wrote for myself as well.

My guess is it is all familiar because everyone borrowed heavily from good old John Carmack back in the day. I know I did.
 

Kharza-kzad_sl

shitlord
1,080
0
The last 2 days have been strange. Had a couple instances of changes to source files going entirely unnoticed by the build system. Then when it finally realizes something changed it decides to rebuild the entire solution to the tune of 2 hours. Did that twice.

Then I got things horribly confused by adding some classes in visual studio. I guess that is a major no-no, and you are supposed to add them from within the editor. VS placed them in some intermediate folder, so I had to dig them out and move them into source, then when things went haywire I deleted them entirely and the build system seemed to somehow think they were still there for about five minutes.

Then some of the tools it builds are misnamed so the editor can't find them (some shader builder thing and something to do with lighting). On the plus side my pathfinding lib "just worked" when I ported it over from C#. Probably because I write C# pretty much how I write ++. C with a cpp extension.

I can't imagine actually making anything with this. With all of the extra trouble, simple tasks can take DAYS. Maybe this is why teams are 400+ people nowadays.
 

Kharza-kzad_sl

shitlord
1,080
0
I started out binary only, but quickly ran into the problem described above with keybindings. Getting source allowed me to step down into things and find the problem. Also I really like seeing how they do things.

My pathing forms connections via callbacks that ask whatever engine you are using stuff like "can I move from this point to this point without hitting anything?". I was pleased to see that unreal does proper swept shape collisions like I do. They even allow rotation! Pretty fancy, I don't do that in my little libs.

Since I went to 4.9.2, things have been pretty smooth. Had one strange build problem where it though a class I deleted was still there, but rescan solution fixed it without it flipping out and rebuilding everything. Once I got all my classes in (this time added via the editor!), I had fairly fast iteration time keeping the editor open and hitting compile from the editor button. When that stuff works it is really snazzy!

Today I'm going to see if I can figure out how to render simple primitives like lines and polys and such for debug drawing things.

BTW I'm betting the reason things got so strange was all the screwing around I did with the projects and solutions trying to fix the "debug editor" build, which btw is working as it should in 4.9.2. I was attempting to link in my C# libs as well, which didn't work out too well. That added a bunch of messed up build targets.
 

Kharza-kzad_sl

shitlord
1,080
0
The line draw stuff works really well:
rrr_img_112588.jpg


Reveals all the strange holes in my path grid. I grabbed the polys from the navmesh to build the grid with, but some of them are underneath the floor. The existing pathing works just fine though, not sure why it is doing that.

In my own stuff to establish a valid link between nearby nodes, after trying a bunch of different ways, I ended up writing a routine similar to what a modern fps uses for movement, but with a few steps to make the gravity curve a little better. Was hoping unreal had something similar but I haven't found it yet.
 

Kharza-kzad_sl

shitlord
1,080
0
The holes turned out to be non-planar polygons. The detour navmesh stuff is apparently ok with that. After detecting and triangulating those, things started working well.

The blue line is my stuff, the running player uses unreal's detour stuff, which is alot smarter:

https://dl.dropboxusercontent.com/u/...avMeshery.webm

Still need to fix connections, I'm just accepting any node in range, but that can cut through a solid corner here and there.
 

Kharza-kzad_sl

shitlord
1,080
0
Ludum Dare is coming up this weekend. I'll probably try using unreal for the jam. I have to work monday so I can't use all 3 days but I want the relaxed rules so I can use the little UnrealMan shiny robot dude and whatever other built in stuff. I haven't figured out how to import characters from max, looked really involved.

I had another brutal debug session spread out over many hours over the past week or two. I made a spawn region to spawn friendly units and discovered that all sorts of stuff doesn't get hooked up properly when you spawn something vs dropping it into the editor. The goog was polluted with about 5 different issues, all of which turned out not to be the problem.

There's no way I'd have ever solved this problem without running full debug with engine source. I had to dig down into the guts of the world update to find it. It has kind of soured me on googling for answers. All the goog stuff led me on horrible wild goose chases, where if I'd have just dug in and debugged it, I'd have been done in a couple hours.
 

Tenks

Bronze Knight of the Realm
14,163
606
I'd be apprehensive to use closed source as well. Even if there isn't a bug in the code per-se it may not be operating exactly how you expect and stepping through the code is the best documentation for what the source is actually doing.
 

Kharza-kzad_sl

shitlord
1,080
0
Didn't quite make it, but learned a lot:

Ludum Dare 34 Failure Timelapse - YouTube

I decided on a dungeon crawler with "growing" gear (growing being the theme). I managed to get some basic diablo style stat based combat going, and a few bits of the AI and that was about it.

I hit 2 major problems:

Alot of functionality in C++ unreal comes from subclassing and overriding virtuals in the various commonly used classes such as character, controller etc... You almost always should call the base class at the top, and I forgot to do that in one spot. This resulted in some really really strange behaviour, and about 4 hours of digging around in the guts. The problem was the character's path movement wasn't moving the character, and I found that alot of that stuff gets deferred so it was really difficult to follow.

The other was the Widget UI stuff. They have a pretty nice editor to set up gumps and such, but this stuff is REALLY not designed with C++ in mind. A great deal of functionality is hidden or buried down in the private directories in the source. The internal stuff uses one kind of smart pointer and the user facing UObject stuff uses another kind and they don't play nice together. The whole thing reeked of boost. I ended up giving up and using blueprints, but by the time I had a basic text inventory gump, about 4 hours had evaporated.

I also again ran into the "googling makes it worse" phenomenon. Turns out there's a dozen things that could be wrong if your pathing isn't moving the character.
 

Kharza-kzad_sl

shitlord
1,080
0
Today's fun, a widgety hud that won't draw. So I set a breakpoint in NativePaint. Here's the callstack:

> UE4Editor-ContentTest-901-Win64-Debug.dll!UInGameUIC::NativePaint(FPaintContext & context) Line 11 C++
UE4Editor-UMG-Win64-Debug.dll!SObjectWidget::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 71 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-Slate-Win64-Debug.dll!SConstraintCanvas::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 174 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SOverlay::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 95 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SOverlay::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 95 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SPanel::paintArrangedChildren(const FPaintArgs & Args, const FArrangedChildren & ArrangedChildren, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 39 C++
UE4Editor-SlateCore-Win64-Debug.dll!SPanel::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 19 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-Slate-Win64-Debug.dll!SScissorRectBox::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 66 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SCompoundWidget::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 25 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SOverlay::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 95 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SCompoundWidget::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 25 C++
UE4Editor-Slate-Win64-Debug.dll!SViewport::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 93 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SCompoundWidget::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 25 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-Slate-Win64-Debug.dll!SCanvas::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 121 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SOverlay::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 95 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SCompoundWidget::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 25 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SCompoundWidget::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 25 C++
UE4Editor-Slate-Win64-Debug.dll!SBorder::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 94 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SOverlay::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 95 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SPanel::paintArrangedChildren(const FPaintArgs & Args, const FArrangedChildren & ArrangedChildren, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 39 C++
UE4Editor-SlateCore-Win64-Debug.dll!SPanel::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 19 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SCompoundWidget::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 25 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SPanel::paintArrangedChildren(const FPaintArgs & Args, const FArrangedChildren & ArrangedChildren, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 39 C++
UE4Editor-Slate-Win64-Debug.dll!SSplitter::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 164 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SCompoundWidget::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 25 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SPanel::paintArrangedChildren(const FPaintArgs & Args, const FArrangedChildren & ArrangedChildren, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 39 C++
UE4Editor-Slate-Win64-Debug.dll!SSplitter::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 164 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SCompoundWidget::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 25 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SPanel::paintArrangedChildren(const FPaintArgs & Args, const FArrangedChildren & ArrangedChildren, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 39 C++
UE4Editor-Slate-Win64-Debug.dll!SSplitter::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 164 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SCompoundWidget::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 25 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SPanel::paintArrangedChildren(const FPaintArgs & Args, const FArrangedChildren & ArrangedChildren, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 39 C++
UE4Editor-Slate-Win64-Debug.dll!SSplitter::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 164 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SOverlay::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 95 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SCompoundWidget::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 25 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SPanel::paintArrangedChildren(const FPaintArgs & Args, const FArrangedChildren & ArrangedChildren, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 39 C++
UE4Editor-SlateCore-Win64-Debug.dll!SPanel::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 19 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SCompoundWidget::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 25 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SCompoundWidget::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 25 C++
UE4Editor-Slate-Win64-Debug.dll!SBorder::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 94 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SOverlay::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 95 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SPanel::paintArrangedChildren(const FPaintArgs & Args, const FArrangedChildren & ArrangedChildren, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 39 C++
UE4Editor-SlateCore-Win64-Debug.dll!SPanel::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 19 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SCompoundWidget::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 25 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SPanel::paintArrangedChildren(const FPaintArgs & Args, const FArrangedChildren & ArrangedChildren, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 39 C++
UE4Editor-Slate-Win64-Debug.dll!SSplitter::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 164 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SOverlay::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 95 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SCompoundWidget::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 25 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SPanel::paintArrangedChildren(const FPaintArgs & Args, const FArrangedChildren & ArrangedChildren, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 39 C++
UE4Editor-SlateCore-Win64-Debug.dll!SPanel::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 19 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SPanel::paintArrangedChildren(const FPaintArgs & Args, const FArrangedChildren & ArrangedChildren, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 39 C++
UE4Editor-SlateCore-Win64-Debug.dll!SPanel::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 19 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SOverlay::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 95 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SCompoundWidget::OnPaint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 25 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::paint(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 703 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWindow::paintWindow(const FPaintArgs & Args, const FGeometry & AllottedGeometry, const FSlateRect & MyClippingRect, FSlateWindowElementList & OutDrawElements, int LayerId, const FWidgetStyle & InWidgetStyle, bool bParentEnabled) Line 1682 C++
UE4Editor-Slate-Win64-Debug.dll!FSlateApplication:
biggrin.png
rawWindowAndChildren(const TSharedRef<SWindow,0> & WindowToDraw, FDrawWindowArgs & DrawWindowArgs) Line 964 C++
UE4Editor-Slate-Win64-Debug.dll!FSlateApplication::privateDrawWindows(TS haredPtr<SWindow,0> DrawOnlyThisWindow) Line 1182 C++
UE4Editor-Slate-Win64-Debug.dll!FSlateApplication:
biggrin.png
rawWindows() Line 927 C++
UE4Editor-Slate-Win64-Debug.dll!FSlateApplication::Tick() Line 1441 C++
UE4Editor-Win64-Debug.exe!FEngineLoop::Tick() Line 2460 C++
UE4Editor-Win64-Debug.exe!EngineTick() Line 52 C++
UE4Editor-Win64-Debug.exe!GuardedMain(const wchar_t * CmdLine, HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, int nCmdShow) Line 145 C++
UE4Editor-Win64-Debug.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow) Line 189 C++
[External Code]


I've no idea how it could possibly be that huge. It's a canvas and 2 progress bars.
 

Kharza-kzad_sl

shitlord
1,080
0
Figured out why it is so big. There's a tool called Widget Reflector, and with that you could see the gigantic gnarly tree that is the editor preview window.

I also saw that the widget, which looks perfectly normal in the debugger, is apparently a completely different type when looked at via the reflector. I can't really tell if something is going wrong in creation or there's a funny c style cast somewhere or what.

I've tried about a dozen different creation methods, all seem to result in this strange transformation (if indeed that is what is happening).

Doing a controller blueprint and setting the widget blueprint from the editor works, but I really don't want to make a blueprint just to get one goddamn value. I think I might try it and step into it and see if I can figure out how it works.
 

Kharza-kzad_sl

shitlord
1,080
0
Ok to save someone else 12 hours:

There are several ways to load up assets. I've been using the asset registry module stuff like so:
rrr_img_120290.png


Then in my controller:
rrr_img_120291.png


mpHUD is a pointer to a class with UUserWidget as the base, with the hud widget blueprint reparented to said class. Does that make any sense? Probably not. What an asspain.

The key was that GeneratedClass bit above. I found that by doing controller and game mode blueprints, then setting the widget thing from the editor. Looking at that in the debugger revealed that it was a UBlueprintGeneratedClass. I had no idea there was such a thing. Searching for that got me to some code that used GeneratedClass to cast to UBlueprintGeneratedClass down in the editor source.
 

Kharza-kzad_sl

shitlord
1,080
0
So I upgraded from a Q6600 with 8 gigs of 800mhz ram and some fairly crappy slow hard drives to an i5-4590 with 16 gigs of 2200mhz ram and a couple ssds. My old build time was around 2.5 hours, though I don't remember the exact seconds. New machine == 1521 seconds or about 25.5 minutes. \o/