i can't change variable in script

Announcements, support questions, and discussion for the Dialogue System.
Post Reply
Yob
Posts: 21
Joined: Sun Aug 06, 2017 11:30 am

i can't change variable in script

Post by Yob »

Hi.

i am working on random conversation.
so i want to change a variable in my script before starting conversation.
eg. script chooses one of characters randomly, and then starts conversation of first choosen character.

so i want to set variable at each character. and dialoguesystemtrigger's condition checks the variable.

but in my scripts it doesn't work.

"
public void putCharacter()
{

PixelCrushers.DialogueSystem.DialogueLua.SetVariable("who", names[who]);

gameObject.GetComponent<DialogueSystemTrigger>().OnUse();
who++;
"

above is my code.
names[who] is first character's name.

i am confused what is wrong. please help me!
User avatar
Tony Li
Posts: 21678
Joined: Thu Jul 18, 2013 1:27 pm

Re: i can't change variable in script

Post by Tony Li »

Hi,

If you want to set a Dialogue System variable named "who", that code should work. To confirm, you can view the value of Variable["who"] in the Dialogue Editor's Watches tag at runtime.

I don't understand this part:
Yob wrote: Wed May 12, 2021 10:25 amscript chooses one of characters randomly, and then starts conversation of first choosen character.
How does the variable "who" relate to starting a conversation?

If you want to start a conversation from script, you can use DialogueManager.StartConversation(). Example:

Code: Select all

DialogueManager.StartConversation("Title", actorTransform, conversantTransform);
If you want a Dialogue System Trigger to start a conversation, you can change its conversation, conversationActor, and conversationCovnersant properties before using OnUse():

Code: Select all

var dsTrigger = GetComponent<DialogueSystemTrigger>();
dsTrigger.conversation = "Title";
dsTrigger.conversationActor = actorTransform;
dsTrigger.conversationConversant = conversantTransform;
dsTrigger.OnUse();
If you want to change the name used by an actor, such as the Player actor, before starting a conversation, set its Display Name field:

Code: Select all

DialogueLua.SetActorField("Player", "Display Name", names[who]);
dsTrigger.OnUse();
Yob
Posts: 21
Joined: Sun Aug 06, 2017 11:30 am

Re: i can't change variable in script

Post by Yob »

Thanks for good solution!

i need variable because i wanted to shuffle randomly and start its own conversation of each characters.
but your solution looks better.

i start conversation with your code.

DialogueManager.StartConversation("Title"); (i think Transform is not necessary)

i want to start at first default conversation such as 'greeting'
and i tried to execute function putCharacter() by scene event at the end of conversation .
(you can see the picture1)

public void putCharacter()
{
title = names[who];

DialogueManager.StartConversation(title);

who++;}

it is the function.
but it says that another conversation is already active. (picture2)

what can i do? if i want to run some conversation by script right after previous conversation?

thanks always!
Attachments
questions.png
questions.png (96.43 KiB) Viewed 350 times
questions2.png
questions2.png (46.91 KiB) Viewed 350 times
User avatar
Tony Li
Posts: 21678
Joined: Thu Jul 18, 2013 1:27 pm

Re: i can't change variable in script

Post by Tony Li »

I recommend linking your 'greeting' conversation to a different conversation for each character. Add Conditions that check the "who" variable. Before starting the greeting conversation, set the "who" variable. In fact, you don't even need the "who" variable if you specify the conversant GameObject. Example:

Code: Select all

DialogueManager.StartConversation("Greeting Conversation", player.transform, adam.transform);

Greeting Conversation:
who1.png
who1.png (16.04 KiB) Viewed 345 times

Linked conversations:
who2.png
who2.png (9.55 KiB) Viewed 345 times
Post Reply