Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

[RELEASED] Dialogue System for Unity - easy conversations, quests, and more!

Discussion in 'Assets and Asset Store' started by TonyLi, Oct 12, 2013.

  1. GrassWhooper

    GrassWhooper

    Joined:
    Mar 25, 2016
    Posts:
    108
    Hey,
    just one short question
    is there a way to play audio, or animation (or any sequence), at a specific word in the subtitle text?
     
  2. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Here are some approaches you could take:

    1. Determine how long it will take your typewriter effect to get to the word. Then use an Audio() sequencer command. For example, let's say the typewriter is set to 1 character per second, the text is "You're the best!", and you want to play the audio clip "Fanfare" when it gets to "best" (11 characters in). Then use this sequence:

    {{default}};
    Audio(Fanfare)@11

    2. The approach above is easy, but it's not practical if you need to do this a lot. Another approach is to put a custom tag in your text, such as "You're the [audio:Fanfare]best!". Then add a script with an OnConversationLine method to the Dialogue Manager. In the method, extract the tag from the text and add a sequencer command. Something like:

    Code (csharp):
    1. void OnConversationLine(Subtitle subtitle)
    2. {
    3.     var text = subtitle.formattedText.text;
    4.     var tagStart = text.IndexOf("[audio:");
    5.     if (tagStart == -1) return; // No tag, so skip the rest.
    6.     var tagEnd = text.Substring(tagStart).IndexOf("]");
    7.     var tagLength = tagEnd - tagStart + 1;
    8.     var tag = text.Substring(tagStart, tagLength);
    9.     subtitle.formattedText.text = text.Replace(tag, "");
    10.     var audioName = tag.Substring("[audio:".Length, tagLength - "[audio:]");
    11.     var charactersPerSecond = DialogueManager.standardDialogueUI.conversationUIElements.defaultNPCSubtitlePanel.subtitleText.gameObject.GetComponent<AbstractTypewriterEffect>().charactersPerSecond;
    12.     var timestamp = tagStart / charactersPerSecond;
    13.     subtitle.sequence = $"Audio({audioName})@{timestamp}; {subtitle.sequence}";
    14. }
    3. Or use TextMesh Pro (see TextMesh Pro Support) and <link> tags. Make a subclass of TextMeshProTypewriterEffect that handles <link> tags as it types out.
     
    GrassWhooper likes this.
  3. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    The Dialogue System Extras page has an updated TextSync Support package (direct download) that adds a ContinueButtonStopTextSyncActor component, which is a subclass of StandardUIContinueButtonFastForward that stops the actor's TextSync lipsync. Replace your continue button's StandardUIContinueButtonFastForward with a ContinueButtonStopTextSyncActor component.
     
    claudius_I likes this.
  4. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Dialogue System Addon for OpenAI - Version 1.0.3 Released

    upload_2023-5-19_11-21-38.png

    Version 1.0.3 of the Dialogue System Addon for OpenAI is now available on the Asset Store!

    You can use the addon to:
    • Draft conversations quickly
    • Generate barks
    • Get ideas when you have writer's block
    • Check spelling and grammar
    • Translate your content to other languages
    • Generate portrait images
    • Generate voice audio for your dialogue
    • Play runtime-generated conversations
    • and more
    This update adds improvements to runtime conversation generation, including auto-generation of voice audio.

    There's also a new tutorial on setting up runtime conversations in which NPCs can reply dynamically to whatever the player enters:



    The complete tutorial playlist is here: Dialogue System Addon for OpenAI Video Tutorials
     
    claudius_I likes this.
  5. claudius_I

    claudius_I

    Joined:
    May 28, 2017
    Posts:
    251
    Hello Tony

    I want to share with you the game I've been developing. Thank you for helping me all these years :) (I use Dialogue System, Quest Machine, and Love/Hate)

     
    TonyLi likes this.
  6. Jakuri_F

    Jakuri_F

    Joined:
    Mar 9, 2020
    Posts:
    23
    Hi Tony,
    Although I've called
    Code (CSharp):
    1.         DialogueSystemController systemController = GetComponent<DialogueSystemController>();
    2.         systemController.PreloadMasterDatabase();
    3.         systemController.PreloadDialogueUI();
    4.         systemController.PreloadResources();
    There is still a slight delay before each conversation starts for the first time. May I preload spicific conversations (e.g. conversations may triggered in the scene)?
     
  7. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Hi! No need to call any of that. Just tick the Dialogue Manager GameObject's Other Settings > Preload Resources checkbox and set Warm Up Conversation Controller to Extra. This will preload things so that the first conversation doesn't have any extra small delay. However, it won't address the issue you described of a slight delay before each conversation. The best way to address that is to what happens in the Profiler. The two most common culprits are:
    • Canvas relayout: Put your dialogue UI in a separate canvas from other UIs. For simplicity, the default Dialogue Manager prefabs has just one canvas into which it instantiates the dialogue UI, quest log window, quest tracker HUD, and selector UI elements. When you change one thing, such as activating the dialogue UI, Unity will perform a relayout of the entire canvas, including the quest and selector elements, which isn't necessary.
    • Or condition checking: See How To: Use Group Nodes To Reduce Condition Checking Time
    • Other possibilities include any scripts you may be using that have OnConversationStart() methods or that hook into the C# event DialogueManager.instance.conversationStarted, or any Dialogue System Events components that do things in the OnConversationStart() UnityEvent.
     
    Jakuri_F likes this.
  8. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Very nice! I really like the subtle text animation you use in the dialogue UI.
     
    claudius_I likes this.
  9. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Let Bions Be Bygones - New Trailer at INDIE Live Expo

    In 1 hour, INDIE Live Expo is debuting the new trailer for Bohemian Pulp's Let Bions Be Bygones, made with the Dialogue System for Unity.


    (This is the previous trailer.)
     
  10. Jakuri_F

    Jakuri_F

    Joined:
    Mar 9, 2020
    Posts:
    23
    Thanks for your idea, through Profiler I've found it is because I set images as Portrait Textures instead of Portrait Sprites for actors, thus UITools.CreateSprite would be a little slow(200+ms).
    Thank you!
     
    TonyLi likes this.
  11. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Good detective work! Once you change them to sprites and assign them to the actors' Portrait Sprites lists, that should take care of that performance hit. Alternatively, you could add a PreloadActorPortraits component to your Dialogue Manager. This will convert the textures to sprites when the game starts and then release the texture memory.
     
  12. GrassWhooper

    GrassWhooper

    Joined:
    Mar 25, 2016
    Posts:
    108

    hey small question, just occured to my mind so we have

    {{default}};
    Audio(Fanfare)@11


    which was the first solution you suggested, but in the second solution, i noticed we use
    Code (CSharp):
    1.     subtitle.sequence = $"Audio({audioName})@{timestamp}; {subtitle.sequence}";
    where we change the waiting, to use time, rather than the character, is there a particular reason for that?
    like, for example, couldn't we just use


    Code (CSharp):
    1.  
    2. string tagStartS = tagStart.ToString();//tag start was the index where we started the tag [audio:FanFare]
    3. subtitle.sequence = $"Audio({audioName})@{tagStartS}; {subtitle.sequence}";
    4.  
    ---------------------

    and one more last question, how do these sequences work when we show text all at once?

    example, if i press space in my game i have this function which shows up the entire text
    Code (CSharp):
    1.     public void ShowAllText()
    2.     {
    3.         if (!gameObject.activeInHierarchy)
    4.             return;
    5.         if (!getLastTypeWriter)
    6.             return;
    7.  
    8.         string text = DialogueManager.currentConversationState.subtitle.formattedText.text;
    9.  
    10.         getLastTypeWriter.StopTyping();
    11.         var textUI = getLastTypeWriter.GetComponent<TextMeshProUGUI>();
    12.         textUI.text = text;
    13.         textUI.maxVisibleCharacters = textUI.text.Length;
    14.     }
    at first glance, i can imagine that the time stamp method (sequence) would keep running, and then play at a later time, even though the entire text is on the screen.

    but to be fair, i don't quite get how the "@11" sequence would work, like, would it still play, or would it get ignored? i imagine it would get ignored?

    the behavior that i am trying to get to is that, if we press space, then that custom audio from that mark up tag should not show up.

    -------
    One more last (very important) thing, but i noticed that, if my text has Rich Text Tags like
    <color=red> my text </color>
    then, this method of finding character, (whether its time stamp or its the @11 method), it goes out of sync any ideas how to get text excluding rich text tags?

    title.formattedText.text

    this is the text that i process, sorry if i missed it

    Edit: so appearently, i need some instance of TextMeshPro, afterwards i need to use textComponent.ForceUpdateMesh();
    textComponent.GetParsedText();//returns text with no rich text tags

    i guess, i could use that text to extract my tags, and use that to find proper index
    i did that by creating a canvas, and attaching a text mesh component to it, and giving it scale of 0 and making it world space as well.
     
    Last edited: May 21, 2023
  13. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    That would only work if (1) you want to wait exactly 1 second per character and (2) you're not using any rich text codes. (See my reply about that below.) The code I provided above determines the number of characters that are before the tag and then computes the time to wait based on the typewriter's Characters Per Second.

    If you want to play the audio if the player skipped ahead to the next dialogue entry, put the required keyword in front:

    Code (csharp):
    1. subtitle.sequence = $"required Audio({audioName})@{timestamp}; {subtitle.sequence}";
    The required keyword guarantees that the command plays even if the player skips ahead.

    However, in your case, you're only fast-forwarding the typewriter effect. BTW, you can use the Dialogue System's built-in StandardUIContinueButtonFastForward component instead of your custom code if you want.

    In either of these cases, you'd need to tell the sequencer to finish immediately, which play all commands that have required in front and are still waiting to play:

    Code (csharp):
    1. DialogueManager.conversationView.sequencer.Stop();
    If you use StandardUIContinueButtonFastForward, you'd make a subclass that overrides OnFastForward to do this.

    But since you don't want the audio to play, you can still call DialogueManager.conversationView.sequencer.Stop() but just don't put required in front of the command.

    Run the text through Tools.StripTextMeshProTags():

    Code (csharp):
    1. string plainText = Tools.StripTextMeshProTags(subtitle.formattedText.text);
     
    GrassWhooper likes this.
  14. claudius_I

    claudius_I

    Joined:
    May 28, 2017
    Posts:
    251
    Hello Tony, I have a problem with using this function EyesLook() (integration with Salsa). It works, but my issue is that it skips or goes through the dialogue too quickly where it's called. What could be the problem?

    Thanks
     

    Attached Files:

  15. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Dialogue entries will play for the duration of their sequences. The EyesLook() sequencer command sets the SALSA eye look position and then immediately finishes. If you also want to play the Dialogue Manager's Default Sequence (which you've set to Delay(2)@{{end}}), also include {{default}} in the dialogue entry's Sequence:

    EyesLook(Bark);
    {{default}}

    You don't have to type this manually if you don't want to. You can select "+" > Include Dialogue Manager's Default Sequence with the mouse:

    upload_2023-5-23_8-0-1.png
     
    claudius_I likes this.
  16. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Let Bions Be Bygones Indie Live Expo Trailer Premiere

    Check out the new trailer for Let Bions Be Bygones, made with the Dialogue System for Unity, which just premiered at Indie Live Expo!



    Reminder: The Dialogue System for Unity and Quest Machine are 50% off for just 1 more week in the Spring Sale.

     
  17. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Quick Tip: Customizing the Editor

    Want to show extra info in the Dialogue Editor window?

    You can already turn on lots of options using the Conversations section's Menu > Show submenu such as showing the speaker's portrait and all actor names. And you can show custom fields in the main inspector sections for actors, quests, conversations, etc., by ticking the Main checkbox in the Template section.

    But if that's not enough and you want to show extra custom info, the Dialogue Editor provides plenty of hooks for your own drawing code. See: Customizing the Editor.

    For example, here's a project that shows the actor and conversant portrait images and a dialogue button icon to indicate which one is speaking each entry:

    upload_2023-5-25_20-57-6.png
     
  18. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Dialogue System 50% Off - Sales Ends June 2 at 8 AM PT

    Last chance to get the Dialogue System for Unity, Quest Machine, and more than 500 other assets before the Spring Sale ends on June 2 at 8 AM Pacific.



    The Dialogue System is in SpeedTutor's recommended assets list:

     
  19. flashframe

    flashframe

    Joined:
    Feb 10, 2015
    Posts:
    789
    Hey Tony,

    If I want to get the value of a Field from the active conversation inside my DialogueUI class, how can I do that? I thought the conversation asset might be a property of the ActiveConversationRecord, but I can't see it.

    And since this might be an XY problem, this is my overall intention. I have two kinds of conversations:

    1. A full-screen conversation with BG image & character animations
    2. An "overlay" conversation where only the dialogue panel appears over the current scene.

    My current approach is to set a boolean field on each conversation "IsOverlay". Then when the conversation runs, my DialogueUI can decide whether to display the characters & bg or just the dialogue panel. I figure this way I can reuse the same UI and just optionally enable features.

    I'm sure there are a thousand ways to do it, but if you think there's a smarter way, I'm all ears!

    Thanks!!
     
  20. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Hi! You can use DialogueManager.currentConversationState. Example:

    Code (csharp):
    1. int conversationID = DialogueManager.currentConversationState.subtitle.dialogueEntry.conversationID;
    2. Conversation conversation = DialogueManager.masterDatabase.GetConversation(conversationID);
    3. bool IsOverlay = conversation.LookupBool("IsOverlay");
    Alternatively, you could use two different dialogue UIs and Override Dialogue UI components.
     
    flashframe likes this.
  21. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Good Read: Near-Mage Kickstarter Update

    Stuck In Attic just released a new Kickstarter devlog update for Near-Mage, being made with the Dialogue System for Unity by the devs behind Gibbous - A Cthulu Adventure. (You can wishlist Near-Mage on Steam.) Chris goes into depth on how they've set up barks -- and there are lot of them in the game! The bark videos are embedded in the Kickstarter page so I can't post them here, so here's the game's original reveal trailer:




    Reminder - Spring Sale Ends Tomorrow 8 AM PDT - Dialogue System 50% Off

    The Dialogue System is 50% off for a limited time.

     
  22. flashframe

    flashframe

    Joined:
    Feb 10, 2015
    Posts:
    789
    Perfect, thanks!
     
    TonyLi likes this.
  23. sachaamm

    sachaamm

    Joined:
    Apr 11, 2016
    Posts:
    30
    Hi, can I change conversation conditions at runtime ? if yes how ? i'm changing the lua code in the editor but it didnot affect the flow. Thanks for the support
     
  24. flashframe

    flashframe

    Joined:
    Feb 10, 2015
    Posts:
    789
    Sorry, just following up on this.

    It looks like the ConversationController is initialised after the DialogueUI at the start of a conversation, is that right?

    So the CurrentConversationState isn't available when Open() is called on the UI?

    I'm doing my UI initialisation in Open(), but get a null reference when trying to access the conversation state.
     
  25. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Hi! There are two ways to do this:

    1. Change the variables/values that the conditions check. For example, if your dialogue entry is:
    • Dialogue Text: "You look strong!"
    • Conditions: Variable["Strength"] > 15
    Then you can change the value of the "Strength" variable. In C#, use DialogueLua.SetVariable("Strength", 18). In Lua, use Variable["Strength"] = 18


    2. Or edit the Conditions field. (For example, say you want to change the Conditions to Variable["Wisdom"] > 10) If you want the change to remain permanent after exiting play mode, UNtick the Dialogue Manager's Other Settings > Instantiate Database component before entering play mode.
     
  26. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Can you move your initialization to an OnConversationStart(Transform) method on the Dialogue Manager GameObject or its hierarchy, or the C# event DialogueManager.instance.conversationStarted? That the point that OnConversationStart/conversationStarted is invoked, currentConversationState has been set.
     
    flashframe likes this.
  27. Heero888

    Heero888

    Joined:
    Jun 18, 2017
    Posts:
    57
    Hi,

    I have voice recording for every single dialogue in my game. Is it possible to play voice (.wav file) along with the dialogue text when it is played by the system?
     
  28. flashframe

    flashframe

    Joined:
    Feb 10, 2015
    Posts:
    789
    I will do that for these specific parts of the UI, yes. Thanks again!
     
    TonyLi likes this.
  29. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Hi! Yes. The quickest way to hear a voice recording is to put the .wav file in a folder named Resources and then drag it into the dialogue entry node's Sequence field.

    The more scalable way is to use entrytags and Addressables. More info:
    Briefly:
    1. In the Dialogue Editor window's Database tab, export a Voiceover Script.
    2. Name your .wav files according to their entrytags as indicated in the Voiceover Script.
    3. Put them in a Resources folder.
    4. Set the Dialogue Manager's Camera & Cutscene Settings > Default Sequence to:
      AudioWait(entrytag); Delay({{end}})
    5. Optional:
      • Install the Addressables package.
      • Select all of the .wav files. Tick the Addressable checkbox. This will set their addressable keys to the same as their filenames and move them out of the Resource folder(s).
      • In the Dialogue System Welcome Window, tick the USE_ADDRESSABLES checkbox.
     
  30. fax58

    fax58

    Joined:
    Dec 27, 2021
    Posts:
    42
    Hi Tony good morning!
    I have a quick question: when using the WaitForMessage command, while waiting for the message, the response menu panel gets deactivated. How can I deactivate also the npc subtitle panel (I'm using a modified version of the wheel standard dialogue UI)? I checked trough the code but I wasn't able to find the anything useful.
    Thanks in advance!
     
  31. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Hi! Sounds like you want to deactivate the entire dialogue UI. To do this, use the SetDialoguePanel(false) sequencer command. You could either call SetDialoguePanel(true) in the next node, or use @Message() instead of WaitForMessage() as in this example:

    • Dialogue Text: "Press the red button. I'll return when you've pressed it."
    • Sequence:
      SetDialoguePanel(false);
      SetDialoguePanel(true)@Message(PressedRedButton)
     
  32. fax58

    fax58

    Joined:
    Dec 27, 2021
    Posts:
    42
    Thank you very much!
     
  33. unity_2938929BD8A69AFA0BED

    unity_2938929BD8A69AFA0BED

    Joined:
    Aug 7, 2022
    Posts:
    2
    Hello! I have a question:
    I need to create a user interface with the ability to create quests while playing. To be clear, I have an online multiplayer game where people can complete quests and get real rewards in the form of NFTs. The game has an administrator who must create new quests. Is it possible to create an interface for the administrator to create quests?
    Another option I see is to manage quests from the server. That is, create a quest directly on the server and transfer it to the game.
    Can you please tell me how can I implement something like this?
     
  34. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Yes; your interface can use the QuestLog class to add quests. You can also add new conversations at runtime by creating a new dialogue database. See: How To: Create Dialogue Database At Runtime. Other ways to create a database at runtime are to use an external authoring program such as articy:draft, Arcweave, or Chat Mapper to create the quests and then import that content at runtime. (See Import & Export.) You can put those files on a server if you want.
     
  35. unity_2938929BD8A69AFA0BED

    unity_2938929BD8A69AFA0BED

    Joined:
    Aug 7, 2022
    Posts:
    2
    Thanks so much!
     
  36. sachaamm

    sachaamm

    Joined:
    Apr 11, 2016
    Posts:
    30
    Thanks for the reply. Honestly, as a developer, i feel that your documentation lacks some example more orientated for developers. I briefly saw your videos but didn't found a clear way about how to do it. Again, the API is not clear enough even with the website, but i finally find out how to use the dialogue system api on my own by changing/adding/removing fields from my assets. I highly suggest you to clarify usage of conditions at runtime, for my personal expectation i want to be able to create or edit dynamically, at runtime, the dialog conditions. not only with the editor, it's always good to get a clear API, providing developer abilities to create custom tools above your library back end
     
  37. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    The API is fully documented. Perhaps you didn't find the API reference. It's here. There's also a Guide to Scripting here. And the Conditions Tutorial is here. If there's any other info you need, please let me know.
     
  38. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Happy to help!
     
  39. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Eternights in Days of the Devs Showcase June 8

    On June 8, catch the latest news on Eternights, made with the Dialogue System for Unity, in the Day of the Devs showcase event. Eternights is coming out this summer on PlayStation 4, PlayStation 5, and PC via Steam and the Epic Games Store.

     
  40. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    If you missed the first video update for Eternights, you can catch it here:



    Check out more details this Sunday during PC Gamer's PC Gaming Show.


    Also in the news today, Chaosmonger Studio just announced their brilliant-looking new name, Three Minutes To Eight, made with the Dialogue System for Unity:



    If you like pixel art adventure games, give it a wishlist. Chaosmonger is the studio behind Clunky Hero and Soul Tolerance, also both made with the Dialogue System for Unity!
     
  41. fax58

    fax58

    Joined:
    Dec 27, 2021
    Posts:
    42
    Hi Tony!
    Sorry to bother but I'm experiencing a technical problem, maybe I touched something that is causing it, I don't know.
    After exporting the db in csv format, in the conversation tab I cannot press some of the conversations entry. On the top of the screen I have a red word "Clear". Also in other tabs, like the quest one, the layout is different.
    I tried to delete and reimport the db few times but with no result.
    Thanks in advance

    Screenshot 2023-06-09 121055.png


    Screenshot 2023-06-09 120949.png
     
  42. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Hi - Are there any errors or warnings in the Console window?

    If you open a different database, such as the demo's Demo Database, does the Dialogue Editor window show the same problem? If so, then it's probably not your database. If this is the case, here are some things to try:
    • Check for errors or warnings in the Console window and resolve them.
    • Revert to a previously-working version from your version control system.
    • Or back up your project and reimport the Dialogue System from the Package Manager window.
    • Did you recently add any other assets to your project, such as editor extensions that might change the way the Unity editor works?
     
  43. fax58

    fax58

    Joined:
    Dec 27, 2021
    Posts:
    42
    I think I found the bug, it is caused when using Dialogue System in the 2022 LTS version.
    I created a new, blank project, installed DS, opened the demo and got the same error. In the warnings I have
    "
    Unable to find style 'ToolbarSeachTextField' in skin 'DarkSkin' Used
    UnityEngine.GUIStylep_Implicit (string)
    PixelCrushers.DialogueSystem.DialogueEditor.DialogueEditorWindowrawConversationFilter () (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/Editor/Dialogue Editor/Nodes/DialogueEditorWindowConversationNodeEditorTopControls.cs:150)
    PixelCrushers.DialogueSystem.DialogueEditor.DialogueEditorWindowrawNodeEditorTopControls () (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/Editor/Dialogue Editor/Nodes/DialogueEditorWindowConversationNodeEditorTopControls.cs:120)
    PixelCrushers.DialogueSystem.DialogueEditor.DialogueEditorWindowrawConversationSectionNodeStyle () (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/Editor/Dialogue Editor/Nodes/DialogueEditorWindowConversationNodeEditor.cs:214)
    PixelCrushers.DialogueSystem.DialogueEditor.DialogueEditorWindowrawConversationSection () (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/Editor/Dialogue Editor/DialogueEditorWindowConversationSection.cs:158)
    PixelCrushers.DialogueSystem.DialogueEditor.DialogueEditorWindowrawCurrentSection () (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/Editor/Dialogue Editor/DialogueEditorWindowMain.cs:468)
    PixelCrushers.DialogueSystem.DialogueEditor.DialogueEditorWindowrawMainBody () (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/Editor/Dialogue Editor/DialogueEditorWindowMain.cs:433)
    PixelCrushers.DialogueSystem.DialogueEditor.DialogueEditorWindow:OnGUI () (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/Editor/Dialogue Editor/DialogueEditorWindowMain.cs:339)
    UnityEditor.EditorGUI/PopupCallbackInfo:SetEnumValueDelegate (object,string[],int)
    "
    Screenshot 2023-06-09 150009.png
     
  44. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    When Unity released 2022.3.1 yesterday, they "broke" the built-in GUI style used for search bars by renaming the style. There's already a patch on the Dialogue System Extras page (direct download) that handles the issue.
     
    avataris-io likes this.
  45. fax58

    fax58

    Joined:
    Dec 27, 2021
    Posts:
    42
    Thanks Tony, you're the best!
    Just to let you know, I have 3 errors in DialogueEditorWindowConversationNodeEditorTopControls.cs:

    CreateQuestConversationFromTemplate
    CreateConversationFromTemplate
    SaveConversationTemplate

    do not exist in the current context.
    I commented the code now, but did I messed up something?
     
  46. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Commenting is fine for now. We have a new version pending submission. When it's available for download (hopefully in the next couple of days) it will resolve that issue -- and it will also add the conversation template feature. :)
     
  47. fax58

    fax58

    Joined:
    Dec 27, 2021
    Posts:
    42
    Perfect! Thanks again!
     
  48. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Glad to help!
     
  49. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    While The Iron's Hot - Wholesome Direct Reveal

    Congratulations to Bontemps Games! They just announced While The Iron's Hot, made with the Dialogue System for Unity and Quest Machine and being published by Humble Games, in the Wholesome Direct Broadcast. You can wishlist the game on Humble Games or on Steam and play the demo now.

     
  50. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,670
    Eternights Release Date Reveal Trailer

    Congratulations to Studio Sai for the release date of the eagerly-anticipated action-adventure + dating game Eternights, made with the Dialogue System for Unity!

     
    avataris-io likes this.