Search Unity

Using buttons to create a dialogue tree.

Discussion in 'Scripting' started by cristo, Jul 2, 2015.

  1. cristo

    cristo

    Joined:
    Dec 31, 2013
    Posts:
    265
    Hi, I’m trying to work out some coding. I’m trying to use the GUI buttons to create a dialogue tree.
    Basically three buttons pop up. One is a question and two on the bottom, if clicked lead, to another question with two more answers. And so on.
    I can’t get the buttons on the bottom to load or show the next group of three buttons.
    The last two choices, answers 12A and 13A to disable the script so the player doesn’t reactivate it again when they move away from the person talking (who’s Sean) in the script.

    My script needs a lot of work, but I'm confused about how to approach fixing it up.






    Seanbot.jpg


    Code (CSharp):
    1. using System.Collections;
    2.  
    3. public class DialogueChoice : MonoBehaviour {
    4.     private bool  pressedButton = false;
    5.     public GameObject Button1Q;
    6.     public GameObject Button2A;
    7.     public GameObject Button3A;
    8.     public GameObject Button2Q;
    9.     public GameObject Button4A;
    10.     public GameObject Button5A;
    11.     public GameObject Button3Q;
    12.     public GameObject Button6A;
    13.     public GameObject Button7A;
    14.     public GameObject Button4Q;
    15.     public GameObject Button8A;
    16.     public GameObject Button9A;
    17.     public GameObject Button5Q;
    18.     public GameObject Button10A;
    19.     public GameObject Button11A;
    20.     public GameObject Button6Q;
    21.     public GameObject Button12A;
    22.     public GameObject Button13A;
    23.     public Transform player;
    24.     public float playerDistance;
    25.     public GameObject Sean2;
    26.  
    27.  
    28.  
    29.     void Start () {
    30.         Button1Q = GameObject.Find ( "Button1Q" );
    31.         Button1Q.SetActive (false);
    32.         Button2A = GameObject.Find ( "Button2A" );
    33.         Button2A.SetActive (false);
    34.         Button3A = GameObject.Find ( "Button3A" );
    35.         Button3A.SetActive (false);
    36.         Button2Q = GameObject.Find ( "Button2Q" );
    37.         Button2Q.SetActive (false);
    38.         Button4A = GameObject.Find ( "Button4A" );
    39.         Button4A.SetActive (false);
    40.         Button5A = GameObject.Find ( "Button5A" );
    41.         Button5A.SetActive (false);
    42.         Button3Q = GameObject.Find ( "Button3Q" );
    43.         Button3Q.SetActive (false);
    44.         Button6A = GameObject.Find ( "Button6A" );
    45.         Button6A.SetActive (false);
    46.         Button7A = GameObject.Find ( "Button7A" );
    47.         Button7A.SetActive (false);
    48.         Button4Q = GameObject.Find ( "Button4Q" );
    49.         Button4Q.SetActive (false);
    50.         Button8A = GameObject.Find ( "Button8A" );
    51.         Button8A.SetActive (false);
    52.         Button9A = GameObject.Find ( "Button9A" );
    53.         Button9A.SetActive (false);
    54.         Button5Q = GameObject.Find ( "Button5Q" );
    55.         Button5Q.SetActive (false);
    56.         Button10A = GameObject.Find ( "Button10A" );
    57.         Button10A.SetActive (false);
    58.         Button11A = GameObject.Find ( "Button11A" );
    59.         Button11A.SetActive (false);
    60.         Button6Q = GameObject.Find ( "Button6Q" );
    61.         Button6Q.SetActive (false);
    62.         Button12A = GameObject.Find ( "Button12A" );
    63.         Button12A.SetActive (false);
    64.         Button13A = GameObject.Find ( "Button13A" );
    65.         Button13A.SetActive (false);
    66.  
    67.  
    68.     }
    69.  
    70.     // Update is called once per frame
    71.     void Update () {
    72.  
    73.      
    74.         playerDistance = Vector3.Distance (player.position, Sean2.transform.position);
    75.         if (
    76.             playerDistance < 4f)
    77.          
    78.         {
    79.  
    80.             ButtonGroup();
    81.  
    82.             }
    83.         }
    84.  
    85.  
    86.  
    87.     void ButtonGroup(){
    88.  
    89.         Button1Q.SetActive (true);
    90.         Button2A.SetActive (true);
    91.         Button3A.SetActive (true);
    92.         {
    93.  
    94.         if
    95.             //Button2A
    96.             (pressedButton) {
    97.             Button1Q.SetActive (false);
    98.             Button2A.SetActive (false);
    99.             Button3A.SetActive (false);
    100.             Button2Q.SetActive (true);
    101.             Button4A.SetActive (true);
    102.             Button5A.SetActive (true);
    103.         }
    104.  
    105.             else
    106.             if
    107.             //Button 3A
    108.             (pressedButton)
    109.             {
    110.             Button1Q.SetActive (false);
    111.             Button2A.SetActive (false);
    112.             Button3A.SetActive (false);
    113.             Button3Q.SetActive (true);
    114.             Button6A.SetActive (true);
    115.             Button7A.SetActive (true);
    116.             }
    117.             else
    118.             if
    119.             //Button 4A
    120.             (pressedButton)
    121.  
    122.             {
    123.             Button2Q.SetActive (false);
    124.             Button4A.SetActive (false);
    125.             Button5A.SetActive (false);
    126.             Button5Q.SetActive (true);
    127.             Button10A.SetActive (true);
    128.             Button11A.SetActive (true);
    129.             }
    130.  
    131.  
    132.             else
    133.             if
    134.             //Button 5A
    135.             (pressedButton)
    136.             {
    137.             Button2Q.SetActive (false);
    138.             Button4A.SetActive (false);
    139.             Button5A.SetActive (false);
    140.             Button3Q.SetActive (true);
    141.             Button6A.SetActive (true);
    142.             Button7A.SetActive (true);
    143.             }
    144.  
    145.  
    146.             else
    147.             if
    148.             //Button 6A
    149.             (pressedButton)
    150.             {
    151.             Button3Q.SetActive (false);
    152.             Button6A.SetActive (false);
    153.             Button7A.SetActive (false);
    154.             Button4Q.SetActive (true);
    155.             Button8A.SetActive (true);
    156.             Button9A.SetActive (true);
    157.             }
    158.  
    159.             else
    160.             if
    161.             //Button 7A
    162.             (pressedButton)
    163.             {
    164.             Button3Q.SetActive (false);
    165.             Button6A.SetActive (false);
    166.             Button7A.SetActive (false);
    167.             Button5Q.SetActive (true);
    168.             Button10A.SetActive (true);
    169.             Button11A.SetActive (true);
    170.             }
    171.             else
    172.             if
    173.             //Button 8A
    174.             (pressedButton)
    175.             {
    176.             Button4Q.SetActive (false);
    177.             Button8A.SetActive (false);
    178.             Button9A.SetActive (false);
    179.             Button5Q.SetActive (true);
    180.             Button10A.SetActive (true);
    181.             Button11A.SetActive (true);
    182.             }
    183.             else
    184.             if
    185.             //Button 9A
    186.             (pressedButton)
    187.             {
    188.             Button4Q.SetActive (false);
    189.             Button8A.SetActive (false);
    190.             Button9A.SetActive (false);
    191.             Button6Q.SetActive (true);
    192.             Button12A.SetActive (true);
    193.             Button13A.SetActive (true);
    194.             }
    195.             else
    196.             if
    197.             //Button 10A
    198.             (pressedButton)
    199.             {
    200.             Button5Q.SetActive (false);
    201.             Button10A.SetActive (false);
    202.             Button11A.SetActive (false);
    203.             Button6Q.SetActive (true);
    204.             Button12A.SetActive (true);
    205.             Button13A.SetActive (true);
    206.             }
    207.             else
    208.             if
    209.             //Button 11A
    210.             (pressedButton)
    211.             {
    212.             Button5Q.SetActive (false);
    213.             Button10A.SetActive (false);
    214.             Button11A.SetActive (false);
    215.             Button6Q.SetActive (true);
    216.             Button12A.SetActive (true);
    217.             Button13A.SetActive (true);
    218.             }
    219.             else
    220.             if
    221.  
    222.             //Button 12A
    223.             //Button 13A
    224.             (pressedButton)
    225.             {
    226.             //Disable script
    227. }
    228. }
    229. }
    230. }
    231.  
     
  2. Pavlon

    Pavlon

    Joined:
    Apr 15, 2015
    Posts:
    191
    So if i understand you right what you try to archive is this.

    Untitled.png

    I dont want to explain everything but more give you a push in the right direction .

    You start your quiz at point 0 what is also the scene_number the text for the buttons is stored in a string array so in this example we need for scene 0 the awnser [0] and [1].

    The next step will be to move to the next branch.
    Code (CSharp):
    1.  
    2. //if the player takes the right awnser  the next scene_number is
    3. scene_number = scene_number * 2 +2; // = 2
    4. // on the left side
    5. scene_number = scene_number * 2 +1; // = 1
    6.  
    Now we also need the new strings for the buttons.
    Code (CSharp):
    1.  
    2. //the left button will be
    3. left_button_index = scene_number * 2 ; // = 4
    4. // on the left side
    5. scene_number = scene_number * 2 +1; // = 5
    6.  
    After this we stand on at point 2 and have the right text loaded 4 and 5.

    Here is some more code to get you startet


    Code (CSharp):
    1. using UnityEngine;
    2. using System.Collections;
    3. using UnityEngine.UI;
    4.  
    5.  
    6.  
    7. public class quiz : MonoBehaviour {
    8.  
    9.     // you will need only one pair of buttons add those in the editor to the GameObject with this script
    10.     public GameObject button_left;
    11.     public GameObject button_right;
    12.  
    13.     private string[] awnsers = {"awnser a1","awnser b1","awnser a2","awnser b3","awnser a4","awnser b4",}; //better import from a extern file like a xml file
    14.     private int scene_number = 0;
    15.  
    16.     // place holder dont want to set up a ui script
    17.     bool left_pressed;
    18.     bool right_pressed;
    19.     //
    20.  
    21.     void Start ()
    22.     {
    23.         SetButtonText (); // we start with 0
    24.     }
    25.  
    26.     private void SetButtonText()
    27.  
    28.     {
    29.         button_left.transform.FindChild("Text").transform.GetComponent<Text>().text  = awnsers[scene_number * 2];
    30.         button_right.transform.FindChild("Text").transform.GetComponent<Text>().text = awnsers[(scene_number * 2) + 1];
    31.     }
    32.  
    33.     void Update ()
    34.     {
    35.         if (left_pressed == true)
    36.             scene_number = scene_number * 2 + 1;
    37.         if(right_pressed == true)
    38.             scene_number = scene_number * 2 + 2;
    39.         if (left_pressed == true || right_pressed == true)
    40.             SetText ();
    41.     }
    42. }
    43.  
     
  3. cristo

    cristo

    Joined:
    Dec 31, 2013
    Posts:
    265
    Thanks a lot for the feedback. I'm sure I will learn a lot from this.

    Thanks for your time. :)