Describe more in details please. You launch the project, it works fine, then crashes after X minutes, and this is the error? Or it doesn’t launch at all? You’re using Git engine or Launcher engine?
These are minor warnings, they’re not supposed to cause a crash. I thought you couldn’t BUILD the project, and that your compiler treated warnings as errors for some reason. But to actually crash…? When I download the plugin and test a demo project, nothing happens for me. What are the repro steps?
Plugin works perfectly fine in 5.2. I switch my unreal engine version from 5.2 to 5.3 (right click on the .uproject file and select the new version), and it crashes with that error on launch. I am not sure what you mean by Git engine or Launcher engine. I am using the Epic Store launcher to start the project.
What is the purpose of the UDialogueWave? I’m going to probably find out by digging through the code anyway, but i figured I’d ask in case i forgot. I couldn’t find anything in the docmentation on it.
Not as much an issue as it is a possible suggestion to consider:
It’s a minor thing, but for scalability would it be possible for you to consider changing the sound files to SoftObjectPtr’s or references or maybe even making that an option in someway and then dynamically loading the sounds as they are needed or even pre-loading them at the start if the user is concerned about load times? It’s just an idea I had regarding hard references that would surely bloat things in a game with hundreds of thousands of lines of dialogue.
If not, I completely understand! It would likely break the plugin for anyone updating as well or at potentially bugger their references. Like with many things it may just be best for users to make those changes themselves because most won’t need it.
I’m modifying most everything anyway for my own project which may just be the requirement as far as I can tell. I’m creating an animal crossing styled dialogue anyway which requires reading individual characters to some extent so i have to place the functionality in the widget anyway.
Would love to hear your thoughts on how it might be possble to improve scalability out of the box.
I think this is called pre-optimization? trying to optimize before actually bumping on a optimization problem. afaik sound files are streamed by default but if I’m wrong then please correct me.
As for SoftObjectPtr this is entirely dependent on the game, so I leave it to the users to figure out their needs and modify the plugin slightly if they require it.
Depends on the scale of your game. Unreal has its own GC, but that doesn’t handle streaming of assets entirely on its own at least in BP.
For many assets, having hard references in BP means it loads every single time. So for ex: If i have a character who has a dialogue tree with 20 different sounds. Every time the character is loaded, the dialogue will be loaded and all 20 sounds will be loaded. The only way to change that would be to remove the dialogue reference and wait for GC to open up the memory it was taking.
By using soft objects and such you avoid this. The hard reference is gone and you can load the sounds as needed. When you think about audio files, textures, vfx, etc. All of this being loaded for just one dialogue tree gets very costly, which makes synchronous loading of potentially complex dialogue trees a heavier cost than needed.
If you know your games scale is going to demand a lot of files that you don’t want hard loaded, its not premature optimization, its just proper code practice. Obviously if you’re doing a game jam or small game it doesn’t matter.
But in a planned pipeline its not a bad idea to have your assets using the proper types because changing all those references and implementing the loading can be a challenge in its own and its easier to narrow down issues with asynchronous stuff when its targeted early at least for me.
Too much stuff going on off the main thread makes it hard for me to find issues, but if I add it piecemeal I get a better grasp.
Hope that explains my take! Definitely look into data assets and the asset manager, its a really powerful tool!
Good to know! I hadn’t seen that before so I was really confused, and hear ya on the soft object thing.
By any chance do you have a good link for how you figured out the FRegexMatcher stuff in the GetFirstChars() of the UDialogueUserWidget?
I’ve managed to add on with some basic tags by copying your workflow a bit, but I’m having trouble tracking down an informative doc on how the matcher works. I haven’t found the time to dig through the source on it yet.
I know, I use async load and soft references for stuff, except for sounds which don’t seem to actually load and slow the project startup unlike other asset types, at least in projects I had worked with.
Is there a demo version with multiple NPC response options? It’s weird that I need to copy and paste a demo widget that operates off of a single response.
Hi, Im using this plugin since beginning and I like it very much.
Recently Im working with Metahumans and adding lipsync (OVRLipsync plugin).
It has an asset type which holds pregenerated visemes.
I would like to add this asset reference to Dialogue in addition to sound wave so I could set visemes for animation BP.
There is a chance to solve it somehow or only by updating plugin C++ source?
I assume I should have to add my new soft object ptr to the dialogue node struct and editing Slate UI source to show/store it properly.
Any help appreciated.
Before I update any C++ source I have an idea maybe works:
Creating a Datatable with Dialogue Node Name or ID + Viseme Ref Asset and updating NPCDialogueWidget when playing Sound Wave to find the proper datatable row using ID and set the asset for NPC OVRLipsync Playback component.
Is the viseme asset type defined in C++ or blueprints? If it’s defined in C++, adding it in C++ is a trivial matter.
You’re correct that it needs to be added to a node struct. The documentation describes the process of adding new variables to nodes in the section “Adding more variables to nodes”.
If I understand your proposed setup with the data tables and ids, I assume you’d be setting the ID using a dialogue event? That would also work, but it’d force you to attach a dialogue event to every node, which would be tiresome. Not recommended.
I’m looking for what I imagine is a relatively simple solution, but maybe isn’t-- I’m in the process of swapping to this dialogue system from a different one that I’ve been using for about 3 years, for some context.
Long story short, a large amount of my projects NPCs are already configured in Tiled w/ the assumption that their starting Dialogue is a String. I’d like to be able to type in the name of the Dialogue Object as a string (as this is the type the field is imported as in UE4 from Tiled) and load the proper asset if it’s valid, or a fallback, generic Dialogue if it’s invalid.
For now, I used your Bubble Comment for holding a Key to find my row in DataTable, it works fine.
Yes, I was able to modify the struct/compiled in C++, but I realized I have to update the editor widget UI source too, to able to set/save it in the Dialog Node Editor. But thanks, I check the documentation, it would be more elegant.
This is simply a question of how to retrieve any asset by name at runtime, and it’s doable, I’ve done it before. I don’t remember the nodes involved. This is an example of how I reference an UMG class by path in a different project: https://i.gyazo.com/b1150ad97e7cba1b0f23e414198e066c.png
There’s also this thing: https://i.gyazo.com/b74554348cab27887d1283a02e812071.png
Sorry, but I don’t recall what exact nodes produce your desired behavior, you’ll either have to experiment or ask somewhere.
You will also need to tell the asset manager to cook these assets despite them not being referenced anywhere.