Получение текста метки из сцены 1 в сцену 2 Unity - PullRequest
1 голос
/ 01 июня 2019

Я создал простую двухмерную карточную игру в Unity. Пока пользователь играет в игру, захватывается определенная информация, например (счет, попытки, время), когда пользователь выигрывает или проигрывает игру, затем соответствующая сцена (игра over or Win scene) запускается, в этих двух сценах идентификаторы любят копировать информацию из партитуры, попыток, временных полей игры на соответствующие метки gameOver или Win, но, похоже, я что-то делаю не так ...

Я пытался найти одинаковые вопросы в StackOverflow, YouTube, Web, я проверил документацию и попробовал разные подходы. Ниже приведен код, с которым я работаю в данный момент, который мне кажется правильным, я не получаю никаких ошибок, только метки не появляются.

'''
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class win_results : MonoBehaviour
{

    //public options script;

    public Text score_final_text;
    public Text tries_final_text;
    public Text time_final_text;

    public void player_win_results(){
       // script = a.getComponent<options>();

        if(options.user_lvl_choice=="easy"){
            GameObject tries_final = GameObject.Find("tries_text_lvl1"); //finds the object named score_results 
            tries_final_text.text = tries_final.GetComponent<Text>().text + "a"; //gets the Text property of it.

            GameObject time_final = GameObject.Find("TimeCounter_lvl1"); //finds the object named score_results 
            time_final_text.text = time_final.GetComponent<Text>().text + "a"; //gets the Text property of it.

            GameObject score_final = GameObject.Find("score_lvl1"); //finds the object named score_results 
            score_final_text.text = score_final.GetComponent<Text>().text + "a"; //gets the Text property of it.
        }
        else if(options.user_lvl_choice=="hard"){

            GameObject tries_final = GameObject.Find("tries_text_lvl2"); //finds the object named score_results 
            tries_final_text.text = tries_final.GetComponent<Text>().text + "a"; //gets the Text property of it.

            GameObject time_final = GameObject.Find("TimeCounter_lvl2"); //finds the object named score_results 
            time_final_text.text = time_final.GetComponent<Text>().text + "a"; //gets the Text property of it.

            GameObject score_final = GameObject.Find("score_lvl2"); //finds the object named score_results 
            score_final_text.text = score_final.GetComponent<Text>().text + "a"; //gets the Text property of it.
        }
    }

как показано в коде выше, я использую GameObject.Find, как указано в документации, я дважды проверил имена и опечатки, скрипты правильно подключены, я не получаю ошибок на выходе, просто ничего не происходит.

Как вы можете видеть выше, я добавил дополнительный символ "a" в конце для целей отладки, символ "a" также не отображается в выводе, что означает, что поиск gameObject не работает правильно в моем примере.

Что я делаю не так?

Заранее спасибо.

1 Ответ

2 голосов
/ 01 июня 2019

При загрузке сцены без второго параметра

SceneManager.LoadScene("scene2");

Старая сцена будет уничтожена, все GameObjects в этой сцене также будут уничтожены, за исключением того, что вы вызвали DontDestroyOnLoad на ней.

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

Самый простой способ передать данные через сцены - использовать статическое поле. Создайте класс и добавьте несколько статических полей:

class Global
{
     public static string user_lvl_choice;
     public static string tries_final;
     ....
}

Затем вы можете установить или получить эти значения из любой сцены.

Global.user_lvl_choice = "easy"
print(Global.user_lvl_choice);

Подробнее:

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