Использование Unity5 и C # получение строк из полей ввода и отображение строк в другой сцене

#c# #user-interface #unity5

#c# #пользовательский интерфейс #unity3d

Вопрос:

Я создал игровой объект, который не уничтожается при загрузке. Я хочу, чтобы это было держателем входных данных, чтобы я мог получить доступ к строкам в другой сцене. Проблема в том, как получить пользовательский ввод из текстовых полей ввода в мой игровой объект и обратно в текстовое поле в другой сцене. Я думаю, что я могу использовать встроенные скрипты по окончательному редактированию (string) script, прикрепленные к полям ввода в инспекторе, чтобы передать входные данные моему игровому объекту. Моя цель — получить строки из пользовательского ввода и отобразить все это в красивом формате в другой сцене. Я также пометил все свои поля ввода и прикрепил скрипт к моему игровому объекту, который находит все игровые объекты с тегом. Это может быть лучшим способом получения строк.

Комментарии:

1. Вы можете использовать PlayerPrefs и хранить данные там или создать статический класс с массивом / структурой / методами свойствами, если все данные динамические, или статический и / или сериализованный класс для сохранения / восстановления данных. Во всех решениях вам не нужно не уничтожать GOS или что-либо еще (кстати, это было сделано для других целей, для выживания с большой сеткой — например, NPC со статистикой, чтобы перемещаться с вами между картами и т.д.)

2. Я думаю, что мне нравится опция playerprefs, поскольку я не пытаюсь сделать что-то необычное, и я никогда не использовал ее раньше. Не могли бы вы привести мне пример кода на c #, который использует playerprefs для хранения пользовательского ввода из поля ввода? И как бы мне получить сохраненные данные для отображения в текстовом поле в другой сцене?

3. Я бы использовал playerprefs для сохранения данных для другого сеанса. Если вы просто хотите сохранить данные для другой сцены, используйте статический класс. Вам даже не нужно «Dontdestroyonload»

4. Спасибо за информацию. На самом деле мне нужно сохранить эти данные в определенном формате для всех будущих пользовательских сессий, поэтому я собираюсь изучить настройки проигрывателя. Можно ли по-прежнему использовать этот код с префиксами проигрывателя?

Ответ №1:

Я бы использовал playerprefs для сохранения данных для другого сеанса. Если вы просто хотите сохранить данные для другой сцены, используйте статический класс. Вам даже не нужно «Dontdestroyonload»

Создайте этот класс в своем проекте:

 public static class ExampleUserData
{
    public static string MyUserData1;
    public static string MyUserData2;
    //etc..
}
  

Прикрепите этот класс к gameobject в вашей сцене 1:

 using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class ExampleScene1 : MonoBehaviour
{
    InputField input1;
    InputField input2;

    void Awake()
    {
        //input1 = something...;
        //input2 = something...;
    }

    void LoadScene2()
    {
        ExampleUserData.MyUserData1 = input1.text;
        ExampleUserData.MyUserData2 = input2.text;

        SceneManager.LoadScene("Scene2");
    }
}
  

Это в вашей второй сцене:

 using UnityEngine;
using UnityEngine.UI;

public class ExampleScene2 : MonoBehaviour
{
    InputField input1;
    InputField input2;

    void Awake()
    {
        //input1 = something...;
        //input2 = something...;
    }

    void Start()
    {
        input1.text = ExampleUserData.MyUserData1;
        input2.text = ExampleUserData.MyUserData2;
    }
}
  

Замените код в Awake(), чтобы найти нужные поля ввода.

Комментарии:

1. Предоставьте ему также пример статического класса, и у нас все получится. Я подам голос, если вы покажете сериализацию с его помощью — просто чтобы мотивировать вас 🙂

2. Пример статического класса уже есть: P Я думаю, у него есть все, что ему нужно для моего ответа. Сериализация чего? Статический класс?

3. Хах, избежал моего внимания! Это действительно есть 🙂 Сериализация данных для записи / чтения (например, в файл), но, думая об этом, это было бы слишком хорошо : P Вот, примите мой голос за 🙂