Page 2 of 2
Re: Calling a custom unity function after the end of a dialogue
Posted: Wed Jul 26, 2023 8:08 am
by Tony Li
Glad to help! Thanks for your patience and for not reaching through the Internet tubes to strangle me for my habit of replying with great walls of text.
Re: Calling a custom unity function after the end of a dialogue
Posted: Thu Aug 03, 2023 1:44 am
by simplepleasuresdxy
Okay, so new question sir.
How do I invoke code at the end of certain dialogue. I know that this one was about conversation end or start, but sequencer command works for this?
I'm thinking that I could invoke a dialogue that asks if the player wants to move to a location after clicking on the trigger and when they hit no, it doesn't do anything. When they hit yes, they move to another scene or at least they invoke code that plays animation and moves them to another scene.
Re: Calling a custom unity function after the end of a dialogue
Posted: Thu Aug 03, 2023 9:36 am
by Tony Li
Hi,
If it's okay to run that function while the conversation is technically still active but at the end, add an empty node to the end. Put your commands in the Script, Sequence, and/or OnExecute() Event sections. If you use the Sequence field, put "required" in front of your commands, and also include "Continue()" such as:
Code: Select all
required LoadLevel(Next Scene);
Continue()
Re: Calling a custom unity function after the end of a dialogue
Posted: Thu Aug 03, 2023 11:35 am
by simplepleasuresdxy
Im not sure if i follow. I understand the empty node part but everything else seems a bit above what i understand.
To be honest the scene to scene transition code itself is a bit beyond me so i only really know how to do it one way. What does your thing suggest?
Re: Calling a custom unity function after the end of a dialogue
Posted: Thu Aug 10, 2023 12:08 pm
by simplepleasuresdxy
Hi tony,Im still having questions about this. I already have a script but i still dont know how to call it with a dialogue sequencer. I dont want to use the dialogue sequencer to activate the scene change, i want the script to do it, which you might have been confused by.
Is there anyway c# code can be called with a sequencer or a dialogue system trigger option im not aware of?
Re: Calling a custom unity function after the end of a dialogue
Posted: Thu Aug 10, 2023 3:41 pm
by Tony Li
simplepleasuresdxy wrote: ↑Thu Aug 10, 2023 12:08 pmIs there anyway c# code can be called with a sequencer or a dialogue system trigger option im not aware of?
Yes. If your C# code is in method in a script, and that script is on a uniquely-named GameObject, you can use the SendMessage() sequencer command. For example, say your script is named MyAwesomeSceneChanger, and it has a method named ChangeScene("sceneName"), like this:
Code: Select all
public class MyAwesomeSceneChanger : MonoBehaviour
{
public void ChangeScene(string sceneName)
{
SceneManager.LoadScene(sceneName);
}
}
Then say you've put this script on a GameObject named "MySceneChanger". Then you could use it to change to a scene named "Moon Lake" using this sequencer command:
Code: Select all
SendMessage(ChangeScene, Moon Lake, MySceneChanger)
If you want to put that in the last node of a conversation and have it automatically end the conversation, too, the whole Sequence would be:
Code: Select all
required SendMessage(ChangeScene, Moon Lake, MySceneChanger);
Continue()
Alternatively, you could write a custom sequencer command. They're not too hard to write. Here's another example that finds the MyAwesomeSceneChanger script no matter what GameObject it's on:
Code: Select all
using UnityEngine;
namespace PixelCrushers.DialogueSystem.SequencerCommands
{
public class SequencerCommandChangeScene : SequencerCommand
{
var sceneChanger = GameObject.FindFirstObjectByType<MyAwesomeSceneChanger>();
if (sceneChanger == null) Debug.LogError("Can't find MyAwesomeSceneChanger");
else sceneChanger.ChangeScene(GetParameter(0));
Stop();
}
}
To use this in a sequence:
Code: Select all
required ChangeScene(Moon Lake;
Continue()
Re: Calling a custom unity function after the end of a dialogue
Posted: Thu Aug 10, 2023 6:05 pm
by simplepleasuresdxy
Okay. I see. Can the send message sequence change a c# boolean from false to true or would i have to make a script to change things? I have a boolean in a data container from scene to scene and i could create a script that when activated, turns that boolean to true, but now im wondering of send message can directly affect the boolean.
Re: Calling a custom unity function after the end of a dialogue
Posted: Thu Aug 10, 2023 7:28 pm
by Tony Li
No, the SendMessage can pass a string parameter or no parameter, but that's it. Here's an example of passing a string parameter:
Code: Select all
SendMessage(ChangeScene, Moon Lake, MySceneChanger);
Here's an example of no parameter:
Code: Select all
SendMessage(OpenDoor, , Front Door)