Как назначить текстовое значение нажатой кнопки другому выбранному текстовому значению кнопки в единстве? - PullRequest
0 голосов
/ 21 февраля 2019

Я показываю 4 вопроса, и пользователь должен будет выбрать ответы из приведенного массива кнопок ответов внизу.чтобы ответить на 1-й вопрос (22 + 6), пользователю нужно будет выбрать желтую кнопку, указанную рядом с ним, а затем нажать любую кнопку в нижнем списке.при нажатии любой кнопки ответа я хочу присвоить это значение предоставленной желтой кнопке.Затем для следующего вопроса (16 + 7) пользователю снова нужно будет выбрать другую желтую кнопку и нажать кнопку ответа из списка.Я не могу присвоить значение нажатой кнопки ответа выбранной желтой кнопке.Кто-нибудь может подсказать, пожалуйста, как этого добиться?

public class WithButtons : MonoBehaviour
{
     Text[] userInputs;
     public Text aValue = null, bValue = null, cValue = null, dValue = null;
     int a, b, c, d;
     public GameObject[] ansButtons;
     private GameObject tempGO;
     Text[] answers;

     private Button myButton;

     //-----------------------------------------------------------------------//
     void Start()
     {        
         PuzzleMaker();
     }

     public void PuzzleMaker()
     {

         a = Random.Range(0, 25);
         b = Random.Range(0, 25);
         c = Random.Range(0, 25);
         d = Random.Range(0, 25);

         aValue.text = a.ToString();
         bValue.text = b.ToString();
         cValue.text = c.ToString();
         dValue.text = d.ToString();


         ansButtons[0].GetComponentInChildren<Text>().text = (a + b).ToString();
         ansButtons[1].GetComponentInChildren<Text>().text = (c + d).ToString();
         ansButtons[2].GetComponentInChildren<Text>().text = (a + c).ToString();
         ansButtons[3].GetComponentInChildren<Text>().text = (b + d).ToString();
         ansButtons[4].GetComponentInChildren<Text>().text = (a + a).ToString();
         ansButtons[5].GetComponentInChildren<Text>().text = (b + b).ToString();
         ansButtons[6].GetComponentInChildren<Text>().text = (c + c).ToString();
         ansButtons[7].GetComponentInChildren<Text>().text = (d + d).ToString();           

     }

     //check which button is clicked
     public void WhichButtonIsClicked(string buttonName)
     {
         Debug.Log(buttonName);

         if (buttonName == "AB")
         {
             //assign value of clicked button to ? button Q1
             //userInput1.text = 
         }
         else if (buttonName == "CD")
         {
             //assign value of clicked button to ? button Q2

         }
         else if (buttonName == "AC")
         {
             //assign value of clicked button to ? button Q3

         }
         else if (buttonName == "BD")
         {
             //assign value of clicked button to ? button Q4

         }
     }    

    public void OnEnable()
     {
         myButton = GetComponent<Button>();
         myButton.onClick.AddListener(() => { ChangeTarget(); });
     }

    public void ChangeTarget()
    {        
        int i;
        for (i = 0; i < ansButtons.Length; i++)
        {
            userInputs[i].text = 
            UnityEngine.EventSystems.EventSystem.current.currentSelectedGameObject.GetComponentInChildren<Text>().text.ToString();
        }      


    }

 } 

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

У меня есть одно решение.Вы можете проверить это enter image description here

публичный частичный класс Form1: Form {

    public int _valueBtn1;
    public int _valueBtn2;
    public int _valueSelectedBtn;
    public bool wasClicked1 = false;
    public bool wasClicked2 =  false;


    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    // BUTTON [?] - TOP
    private void button3_Click(object sender, EventArgs e)
    {

        wasClicked1 = true;


    }

    // BUTTON [5]
    private void button4_Click(object sender, EventArgs e)
    {
        if (wasClicked1)
        {
            _valueSelectedBtn = Convert.ToInt32(this.button4.Text);
            button3.Text = _valueSelectedBtn.ToString();
            wasClicked1 = false;
        }
        else if (wasClicked2)
        {
            _valueSelectedBtn = Convert.ToInt32(this.button4.Text);
            button5.Text = _valueSelectedBtn.ToString();
            wasClicked2 = false;

        }
    }

    // BUTTON [?] - bottom 
    private void button5_Click(object sender, EventArgs e)
    {
        wasClicked2 = true;

    }

    // BUTTON [2]
    private void button8_Click(object sender, EventArgs e)
    {
        if (wasClicked1)
        {
            _valueSelectedBtn = Convert.ToInt32(this.button8.Text);
            button3.Text = _valueSelectedBtn.ToString();
            wasClicked1 = false;
        }
        else if (wasClicked2)
        {
            _valueSelectedBtn = Convert.ToInt32(this.button8.Text);
            button5.Text = _valueSelectedBtn.ToString();
            wasClicked2 = false;

        }
    }
}
0 голосов
/ 21 февраля 2019

Вы можете использовать Button.text.

Просто получите ссылку на кнопку ответа, по которой вы нажимаете.


string textAnswer ;
void OnAnswerButton1(text buttonName){
GameObject answerButton = GameObject.Find("buttonName");
 textAnswer = answerButton.text;

}

теперь у вас есть текст этой кнопки ответа в переменной textAnswer,Так что дайте этот текст "?"button

у вас должна быть какая-то ссылка "?"кнопка.Так что сделайте это, как показано ниже

Button aBbutton; //reference of "?" button

aBbutton.text = textAnswer;




0 голосов
/ 21 февраля 2019

Вы можете назначить текст уже как показано:

ansButtons[0].GetComponentInChildren<Text>().text = (a + b).ToString();

Вам нужно сделать то же самое, что и в этой строке кода
Вам нужен ваш?кнопка и право ansButton

Как получить эти ссылки?

Когда вы получаете первую ссылку, при нажатии желтой кнопки.
у вас может быть такой код:

Button selectedYellowButton = null;

public void getMyYellowButton(string buttonNameEnding) {
Button yellowButton = GameObject.find("YellowButton" + buttonNameEnding);
selectedYellowButton = yellowButton;
}

Затем, когда нажимается кнопка ansButton, вы просто назначаете

public void assignToYellowButton(string buttonNameEnding) {
if (selectedYellowButton != null) {
     Button ansButton = GameObject.find("AnsButton" + buttonNameEnding);
     selectedYellowButton.GetComponentInChildren<Text>().text = ansButtons[indexInArray].GetComponentInChildren<Text>().text;
     }
}

Вы можете использовать любой метод для получения ссылок, которые вам нравятся.
Это зависит от вас:)

Надеюсь, это поможет: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...