Unity. Проблема с заполнением массива

181
17 июня 2022, 15:50

Написал код, который должен заполнять стринговый массив с клавиатуры через поле ввода.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Game : MonoBehaviour
{
    public GameObject Question;   // Сцена с полем ввода
    public GameObject Answer;     // Сцена с введённым текстом
    public InputField PoleVvoda; // Поле ввода
    public Text ShowText;    // Выводимый текст
    
    public string[] QuestionsArray = new string[20];  // Стринговый массив
    public void Confirm ()
    {
        Question.SetActive(false);     // Выключает сцену с полем ввода
        Answer.SetActive(true);        // Включает сцену с введённым текстом
        ShowText.text = PoleVvoda.text + ("?");     // Добавляет к введённому тексту знак вопроса
        for (int i = 0; i < 20; i++)         // Массив состоящий из 20 элементов
        {
            QuestionsArray[i] = ShowText.text;     // Должен присваивать каждому элементу свое слово
        }
        PoleVvoda.text = string.Empty;  // Очистка строки ввода 
    }

Запускаю приложение, ввожу слово, а он присваивает введённое слово всем элементам.

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

Как сделать так, чтобы было поочередное присваивание? Если, что не бейте D:

Answer 1

Вы берете одну строку и циклом вставляете ее во все элементы массива, в этом и проблема. Я полагаю вам нужно что то такое. После каждого нажатия происходит одна вставка в массив, _curIndexQuestionsArray это текущий индекс для массива. Я предусмотрел элементарную защиту от переполнения _curIndexQuestionsArray, через его обнуление. Вам возможно это нужно реализовать как то по другому.

    private int _curIndexQuestionsArray;
    public string[] QuestionsArray = new string[20];  // Стринговый массив
    public void Confirm ()
    {
        Question.SetActive(false);     // Выключает сцену с полем ввода
        Answer.SetActive(true);        // Включает сцену с введённым текстом
        ShowText.text = PoleVvoda.text + ("?");     // Добавляет к введённому тексту знак вопроса
        if(_curIndexQuestionsArray >= QuestionsArray.Length)
            _curIndexQuestionsArray = 0;
        QuestionsArray[_curIndexQuestionsArray] = ShowText.text;   
        _curIndexQuestionsArray++; 
        PoleVvoda.text = string.Empty;  // Очистка строки ввода 
    }
READ ALSO
Как конвертировать int в DateTime c#

Как конвертировать int в DateTime c#

В VK Api возвращается date в странном виде, в виде числа и непонятно как его расшифровывать

168
Enitity Framework и Using

Enitity Framework и Using

Подскажите, а является ли нормальной практикой плодить контексты using при работе с Enitity Framework или правильнее передавать объекты сущностей...

228
Подгрузка контента через кнопку &quot;Показать еще&quot;

Подгрузка контента через кнопку "Показать еще"

Есть такой вид списка новостей:

192