Passing information between Dialogue Tree and Scene

NodeCanvas Forums General Discussion Passing information between Dialogue Tree and Scene

This topic contains 17 replies, has 2 voices, and was last updated by  cgraf062491 1 month, 2 weeks ago.

Viewing 15 posts - 1 through 15 (of 18 total)
  • Author
    Posts
  • #12811

    cgraf062491
    Participant

    Hello All,

    I was wondering how you pass information from the Dialogue Tree to your game scene and vice versa. For example, if at a certain point going through the dialogue, you want to enable Input Fields on the Canvas, then tell the Dialogue Tree to continue after the Input Fields are filled. Thanks very much!

    #12814

    Gavalakis
    Keymaster

    Hello,

    Probably the best way, would be to use the Action Node and [create a custom ‘ActionTask’] within which you can do whatever desired.
    You could for example create a custom ActionTask, which enables the input in question and awaits use submission. Once submission is done, you can then call ‘EndAction’ within that custom ActionTask, so that the Dialogue Tree continues with the next connected child node.

    If you need any help with creating custom action tasks, please let me know!
    Thanks!

    #12815

    cgraf062491
    Participant

    Thanks so much Gavalakis! I will be playing around with the ActionTasks today. I assume that I have to call to a script somewhere for custom ones. I’m not sure how to ‘EndAction’ though. Any help relating to custom ActionTasks you could send my way would be greatly appreciated. Thanks again.

    #12816

    Gavalakis
    Keymaster

    Hey,

    EndAction, is simply a function you need to call from within your custom Action Task, to signal the end of the action 🙂

    Please take a look at the documentation about Creating Custom Tasks on section 4.0 and let me know if you have any questions at all 🙂
    [LINK].

    Thanks!

    #12820

    cgraf062491
    Participant

    Hello again,

    I have been looking through the Action Tasks in the Dialogue Tree Nodes, but I still do not understand how to make a simple custom task. I see many options of already built in tasks, but not how to implement my own script for a specific node. If I want to do something like the Simple Action example in the link you sent, and in my attachment, on a particular node, can you tell me how to implement that specifically? Thanks so much!

    Attachments:
    You must be logged in to view attached files.
    #12827

    Gavalakis
    Keymaster

    Hello again and sorry for the late reply.

    If you want to execute an Action Task within a DialogueTree, you just need to add the node named “Task Action” in the DialogueTree and then from within it’s inspector, hit the “Assign Action Task” button. That will open up a menu from wherein you can choose among all existing ActionTasks that come with NodeCanvas as well as the custom ones you have made, and “assign” that ActionTask to the node.
    As a result, when the “Task Action” node is called in the DialogueTree, so will any Actions that you have assigned in that node.

    Please let me know if that clarifies your questions.
    Thanks!

    #12831

    cgraf062491
    Participant

    Thanks again for the help. What I was missing was adding a script to the Dialogue Tree in the Unity Inspector and making a public method that can be chosen in the Action Task. Now that I am up to making custom scripts to perform actions, I am wondering if there is a specific call like “DialogueTree.Pause()”, or something along those lines to that I can stop the dialogue from continuing on a click until I allow it. Any Pause, Stop, Continue, Go, or something along these lines that I can call in the custom scripts would be great. Does such a thing exist?

    #12838

    Gavalakis
    Keymaster

    Hey,

    Yes, you can pause a currently running DialogueTree, by having a reference to the DialogueTreeController component and then calling:

    
    var dialogue = GetComponent<DialogueTreeController>();
    dialogue.PauseBehaviour();
    

    To continue on a paused DialogueTree, you can similarly call:

    
    var dialogue = GetComponent<DialogueTreeController>();
    dialogue.StartBehaviour();
    

    ( StartBehaviour will either start the dialogue if it’s not running, or continue from wherever it was paused if at all )

    The above examples get the DialogueTreeController component from the same gameobject the example script is attached, thus in this case that example script code should be attached on the same gameobject that DialogueTreeController is found, but that is of course not necessary to do it that way. 🙂

    Let me know if the above help, or if you need any further clarifications.
    Thanks!

    #12841

    cgraf062491
    Participant

    Perfect. This is exactly what I need. Is there a Library of methods like these under DialogueTreeController that I could look at to know all the available methods?

    #12844

    Gavalakis
    Keymaster

    Hey,

    Great. Glad to know this helps.
    The DialogueTreeController has a few other similar methods as well.
    What do you mean by “library of methods” ? 🙂

    Thanks.

    #12848

    cgraf062491
    Participant

    Basically, I just mean is there a list of similar methods that I can see, so I know what else is possible

    #12850

    cgraf062491
    Participant

    I have a new issue where EndAction is being called after an Input Field is filled and everything checks out, but it gives a Null Reference Exception. There are more Nodes after this task in the Dialogue Tree, so I do not know why this would come up.

    #12855

    Gavalakis
    Keymaster

    Hey,

    If you are using MonoDevelop, Visual Studio or similar, you can just get the rest of the available methods with the IDE’s intellisense, but I am sure you know that already 🙂
    There are a couple more of similar methods as said before, those being, a few different StartDialogue overloads, StopDialogue, PauseDialogue and SetActorReference. The base type GraphOwner, where DialogueTreeController derives from, has a few more as well.

    Regarding your EndAction issue, are you referring to a custom ActionTask? If so, can you please share the code?
    What/where exactly is the Null Reference Exception? Can you please post the log?

    Thanks.

    #12870

    cgraf062491
    Participant

    Alright, so I solved the Null Reference Exception that was stopping me from moving through the Dialogue Tree at all. Now, what I want to do is after a button is pushed, I have a script that goes through some validations and then when everything clears, I want to call EndAction to move on in the Tree.

    I tried making a script that just calls EndAction, but because it has to be ActionTask and not MonoBehaviour, I could not attach it to anything. When I try to call a public method in the script that contains EndAction from a separate script, it gives a Null Reference Exception. If I attach the script containing EndAction to a button, the methods do not show up.

    So all of this right now is where I am stuck. I am really sorry this thread has gone on for some time, but I appreciate all the help

    #12880

    Gavalakis
    Keymaster

    Hello,

    No problem about the big thread, but I am a bit puzzled about your last question/issue 🙂
    As you know, EndAction, is a member method of ActionTask and as such you need a reference to the action task that you want to end, and call EndAction in that action task.

    Is it possible for you to please send me an example project to (support_AT_paradoxnotion.com), showing the issue you are facing as well as what and how you are trying to achieve as an example. I am sorry, but it’s quite hard for me to understand your setup and how things are coupled/woring in that setup. If possible that would be great.

    Thanks!

Viewing 15 posts - 1 through 15 (of 18 total)

You must be logged in to reply to this topic.