Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 28.06.2017
Сообщений: 22

Как вывести на экран следующий элемент массива при определенном действии, считывая данные с xml?

20.05.2020, 19:27. Показов 516. Ответов 4

Студворк — интернет-сервис помощи студентам
Создал xml файл
Code
1
2
3
4
5
6
<podskazkiroot>
  <podskazki>
        <podskazka needquestvalue = "0"><text> Войди в белый триггер </text> <questname>QuestQ</questname></podskazka>
        <podskazka needquestvalue = "1"><text> Отлично! </text> <questname>QuestQ</questname></podskazka>
  </podskazki>
</podskazkiroot>
Создал скрипт для считывания этих данных

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using UnityEngine;
using System.Xml.Serialization;
using System.IO;
 
[XmlRoot("podskazkiroot")] 
public class Podskazkiroot
{
    [XmlArray("podskazki")] 
    [XmlArrayItem("podskazka")]
    public Podskazka[] podskazka; 
 
    public static Podskazkiroot Load(TextAsset _xml) 
    {
        XmlSerializer serializer = new XmlSerializer(typeof(Podskazkiroot));
        StringReader reader = new StringReader(_xml.text);
        Podskazkiroot dial = serializer.Deserialize(reader) as Podskazkiroot;
        return dial;
    }
}
 
[System.Serializable]
public class Podskazka
{
    [XmlElement("text")]
    public string text;
    [XmlAttribute("questvalue")]
    public int QuestValue;
    [XmlAttribute("needquestvalue")]
    public int NeedQuestValue;
    [XmlElement("questname")]
    public string QuestName;
}
Для триггера создал скрипт
C#
1
2
3
4
5
6
7
8
9
10
11
public class QuestCube : MonoBehaviour
{
    void OnTriggerEnter(Collider col)
    {
            if (PlayerPrefs.GetInt("QuestQ") == 0) 
            {
                PlayerPrefs.SetInt("QuestQ", 1);
            }
        }
    }
}
Создал скрипт для инициализации на экране
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System.Collections.Generic;
using UnityEngine;
 
public class InstantiatePodskazki : MonoBehaviour
{
    public TextAsset ta; // сам xml файл 
    public Podskazkiroot podskazki; 
    public bool ShowDialogue;
    public int count;
    void Start()
    {
        podskazki = Podskazkiroot.Load(ta);
    }
 
    public void OnGUI()
    {
 
        if (ShowDialogue)
        {
            GUI.Box(new Rect(Screen.width / 2 - 250, Screen.height - 250, 500, 90),
            podskazki.podskazka[count].text); // вижу, что массив из двух строк xml файла удачно создан, все атрибуты считываются
 
                if (podskazki.podskazka[count].QuestValue >= 0) // по идее, если продвигаемся по квесту, то Value +1, но это уже не работает
                {
                    PlayerPrefs.SetInt(podskazki.podskazka[count].QuestName, podskazki.podskazka[count].QuestValue);
                }
        }
    }
}
Как выводить подсказки из массива по очереди при изменении параметра QuestValue?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.05.2020, 19:27
Ответы с готовыми решениями:

Каким образом вывести сообщения/текст при определенном действии
Каким образом можно вывести сообщения/текст при опред. действии и затем его стирание или временное скрытие? Добавлено через 4 часа 16...

Бесконечная перезагрузка при определённом действии
Мой телефон HTC desire 816 dual sim . Работал прекрасно до того как упал в воду . Отдал на починку его прочистили и заменили...

скрипт не срабатывает при определенном действии
есть кнопка которая при помощи аякса запрашивает данные в бд(через php функцию) и данные заносятся в textarea для дальнейшего...

4
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,076
21.05.2020, 08:37
Все у меня работает.
Кликните здесь для просмотра всего текста
У вас не хватает в InstantiatePodskazki
C#
1
using UnityEngine.UI;
1
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,076
21.05.2020, 09:10
C#
1
2
3
4
if (podskazki.podskazka[count].QuestValue >= 0) // по идее, если продвигаемся по квесту, то Value +1, но это уже не работает
                {
                    PlayerPrefs.SetInt(podskazki.podskazka[count].QuestName, podskazki.podskazka[count].QuestValue);
                }
У вас же нет QuestValue в xml
1
0 / 0 / 0
Регистрация: 28.06.2017
Сообщений: 22
22.05.2020, 04:34  [ТС]
zhunshun, добавил QuestValue

Code
1
2
3
4
5
6
<podskazkiroot>
  <podskazki>
        <podskazka questvalue ="1" ><text> Войди в белый триггер </text> <questname>QuestQ</questname></podskazka>
        <podskazka needquestvalue = "2"><text> Отлично! </text> <questname>QuestQ</questname></podskazka>
  </podskazki>
</podskazkiroot>
Так же не работает. Как заставить при КАЖДОМ повышении QuestValue переходить на следующий элемент (строчку подсказок) массива count?
Code
1
2
 if (podskazkiroot.podskazka[count].QuestValuee > 1)
                PlayerPrefs.SetInt(podskazkiroot.podskazka[count].QuestName, podskazkiroot.podskazka[count].QuestValue);
На кубе срабатывает
Code
1
2
3
4
5
if (PlayerPrefs.GetInt("QuestQ") == 1) 
            {
                PlayerPrefs.SetInt("QuestQ", 2); 
                Debug.Log("qwew");
            }
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,076
22.05.2020, 07:49
C#
1
2
3
4
5
6
7
8
9
<podskazkiroot>
  <podskazki>
        <podskazka questvalue ="0" ><text> Войди в белый триггер </text> <questname>QuestQ</questname></podskazka>
<podskazka questvalue ="1" ><text> Войди в белый триггер 1</text> <questname>QuestQ</questname></podskazka>
<podskazka questvalue ="2" ><text> Войди в белый триггер 2</text> <questname>QuestQ</questname></podskazka>
<podskazka questvalue ="3" ><text> Войди в белый триггер 3</text> <questname>QuestQ</questname></podskazka>
        <podskazka needquestvalue = "2"><text> Отлично! </text> <questname>QuestQ</questname></podskazka>
  </podskazki>
</podskazkiroot>
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[XmlRoot("podskazkiroot")]
public class Podskazkiroot {
    [XmlArray("podskazki")]
    [XmlArrayItem("podskazka")]
    public Podskazka[] podskazka;
 
    public static Podskazkiroot Load(TextAsset _xml) {
        XmlSerializer serializer = new XmlSerializer(typeof(Podskazkiroot));
        StringReader reader = new StringReader(_xml.text);
        Podskazkiroot dial = serializer.Deserialize(reader) as Podskazkiroot;
        return dial;
    }
}
 
[System.Serializable]
public class Podskazka {
    [XmlElement("text")]
    public string text;
    [XmlAttribute("questvalue")]
    public int QuestValue;
    [XmlAttribute("needquestvalue")]
    public int NeedQuestValue;
    [XmlElement("questname")]
    public string QuestName;
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
 
public class InstantiatePodskazki : MonoBehaviour {
    public TextAsset ta; // сам xml файл 
    public Podskazkiroot podskazki;
    public bool ShowDialogue;
    public int count;
    void Start() {
        podskazki = Podskazkiroot.Load(ta);
    }
 
    public void OnGUI() {
 
        if (ShowDialogue) {
            GUI.Box(new Rect(Screen.width / 2 - 250, Screen.height - 250, 500, 90),
            podskazki.podskazka[count].text); // вижу, что массив из двух строк xml файла удачно создан, все атрибуты считываются
 
            if (podskazki.podskazka[count].QuestValue >= 0) // по идее, если продвигаемся по квесту, то Value +1, но это уже не работает
            {
                PlayerPrefs.SetInt(podskazki.podskazka[count].QuestName, podskazki.podskazka[count].QuestValue);
            }
            
        }
        Debug.Log(PlayerPrefs.GetInt(podskazki.podskazka[count].QuestName));
    }
}
Я вот так написал, менЯю в редакторе цыфры и вывод мнеЯетсЯ. Галочку ставлю. Проверь еще в триггере столкновение в лог

Добавлено через 11 минут
C#
1
2
3
4
            if (podskazki.podskazka[count].QuestValue >= 0) // по идее, если продвигаемся по квесту, то Value +1, но это уже не работает
            {
                PlayerPrefs.SetInt(podskazki.podskazka[count].QuestName, podskazki.podskazka[count].QuestValue);
            }
Вот эта проверка вообще не правильна, над так
C#
1
2
3
4
            if (Convert.ToInt32(podskazki.podskazka[count].QuestValue) >= 0) // по идее, если продвигаемся по квесту, то Value +1, но это уже не работает
            {
                PlayerPrefs.SetInt(podskazki.podskazka[count].QuestName, podskazki.podskazka[count].QuestValue);
            }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.05.2020, 07:49
Помогаю со студенческими работами здесь

Остановка кода при определенном действии
Люди добрые, помогите, я так и не сумел решить проблему до конца. Вот есть написаны хорошим человеком код, все работает, кроме одного. При...

Диалоговое окно при определенном действии
не подскажите как зделать чтоб выскакивало диалоговое окно при определенном действии ,выводило соообшение и само исчезало через 2-3 секунды

Вызов события при определенном действии
Привет всем!!! У меня на форме есть кнопка button1 при клике на ней выполняет действея, и есть кнопка button2 при клике выполняет такое...

как вывести на экран данные массива по убыванию
Добрый день есть массив например Array ( =&gt; 100 =&gt; 1200 =&gt; 1 =&gt; 3 ) как вывести на экран значения с...

При нажатии на button1 из массива вывести следующий текст в textbox1
При нажатии на button1 из массива вывести следующий текст в textbox1


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru