Почему не срабатывает скрипт при переходе на сцену?

Общие вопросы о Unity3D

Почему не срабатывает скрипт при переходе на сцену?

Сообщение EIvanov 11 окт 2022, 12:57

Сразу скажу - поначалу скрипт работал. Потом я что то сделал (типично, верно?) и скрипт перестал работать.
На сцене StartGameScene есть объект Player. К нему прикреплены 2 скрипта
DontDestroyThisObject
Синтаксис:
Используется csharp
void Awake()
{
// Не удаляем объект, к которому подключен этот скрипт при переходе/загрузке новой сцены.
DontDestroyOnLoad(this);
// Удаляем копию объекта (если вдруг вернулись к первой сцене).
if (GameObject.Find("Player").gameObject != this.gameObject) Destroy(this.gameObject);
}
}


и

PlayerMenu
Синтаксис:
Используется csharp
public class PlayerMenu : MonoBehaviour
{

void Start()
{
string activeScene = SceneManager.GetActiveScene().name;
Debug.Log("Запуск скрипта ");
Debug.Log("Активная сцена "+activeScene);
}

public void CloseButtonClick()
{
SceneManager.LoadScene("StartMenuScene");
}
}


Скрипт подключен к объекту.
Изображение

Запускаем сцену StartGameScene - скрипт срабатывает. В дебаге видим сообщение.
Изображение

Переходим на сцену EventScene - объект не уничтожается (проверено, у него ещё есть вложенные объекты, картинки - всё видно), но скрипт не срабатывает. Нет нового сообщения в дебаге.
Изображение

Почему не срабатывает скрипт? И почему на нем есть какая то галочка (когда у других, у того же DontDestroyThisObject её нет)?

PS
Очень не хочу откатываться в гит т.к. как всегда нарушал правило и коммитил сразу несколько действий.
EIvanov
UNIт
 
Сообщения: 103
Зарегистрирован: 05 июл 2021, 17:23

Re: Почему не срабатывает скрипт при переходе на сцену?

Сообщение Alkos26Rus 11 окт 2022, 16:03

Ну объект же DontDestroyOnLoad, поэтому и Start срабатывает один раз, хотя я этого не проверял, но по логике должно быть так. Галочка появляется при наличии Start или Update
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Почему не срабатывает скрипт при переходе на сцену?

Сообщение EIvanov 12 окт 2022, 16:51

Ну объект же DontDestroyOnLoad, поэтому и Start срабатывает один раз

Спасибо, понял. Заменил на OnLevelWasLoaded.

А я вообще могу получить доступ к отключенному объекту?
Переходим на сцену StartMenuScene и statsMenu отключается.
Переходим на другую сцену, но statsMenu не включается, а пишет что не может найти объект.
То есть я не могу получить доступ к отключенному объекту и его включить?
Всё что мне надо - это скрывать меню на некоторых сценах.

Синтаксис:
Используется csharp
void OnLevelWasLoaded()
{
string activeScene = SceneManager.GetActiveScene().name;
var statsMenu = GameObject.Find("StatsMenu");
if (activeScene=="StartMenuScene") statsMenu.SetActive(false); else statsMenu.SetActive(true);
}
 
EIvanov
UNIт
 
Сообщения: 103
Зарегистрирован: 05 июл 2021, 17:23

Re: Почему не срабатывает скрипт при переходе на сцену?

Сообщение Alkos26Rus 12 окт 2022, 17:45

EIvanov писал(а):Переходим на другую сцену, но statsMenu не включается, а пишет что не может найти объект.
То есть я не могу получить доступ к отключенному объекту и его включить?

Можно получить доступ, если пишет что не может найти, значит его нет на сцене в момент поиска
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Почему не срабатывает скрипт при переходе на сцену?

Сообщение EIvanov 12 окт 2022, 17:57

Можно получить доступ, если пишет что не может найти, значит его нет на сцене в момент поиска

Он есть. В том то всё и дело. Объект не уничтожается.
Ну и это видно на сцене. Но как только объект становиться неактивен, к нему пропадает доступ.
EIvanov
UNIт
 
Сообщения: 103
Зарегистрирован: 05 июл 2021, 17:23

Re: Почему не срабатывает скрипт при переходе на сцену?

Сообщение Alkos26Rus 12 окт 2022, 18:09

EIvanov писал(а):
Можно получить доступ, если пишет что не может найти, значит его нет на сцене в момент поиска

Он есть. В том то всё и дело. Объект не уничтожается.
Ну и это видно на сцене. Но как только объект становиться неактивен, к нему пропадает доступ.

Ну да, не находит неактивный объект, значит тебе нужно делать ссылку на объект
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Почему не срабатывает скрипт при переходе на сцену?

Сообщение EIvanov 12 окт 2022, 18:32

Ну да, не находит неактивный объект, значит тебе нужно делать ссылку на объект

Как? Где?
На первой сцене объекта нет.
На второй сцене объект есть, но должен быть скрыт.
На третьей сцене объект надо показать.
EIvanov
UNIт
 
Сообщения: 103
Зарегистрирован: 05 июл 2021, 17:23

Re: Почему не срабатывает скрипт при переходе на сцену?

Сообщение Saltant 13 окт 2022, 03:58

Если на неактивном объекте есть скрипт, то можешь найти этот объект через FindObjectOfType<скрипт>(true)
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2236
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Почему не срабатывает скрипт при переходе на сцену?

Сообщение EIvanov 13 окт 2022, 18:16

Если на неактивном объекте есть скрипт, то можешь найти этот объект через FindObjectOfType<скрипт>(true)

Скрипт на активном объекте - Player. Этот объект активен всегда.
У этого объекта есть вложенный объект Player->Canvas->StatsMenu.
Скрипт получает имя сцены и в зависимости от него включает или отключает объект StatsMenu.

Если объект StatsMenu активен - я могу его найти. И могу отключить.
А вот назад включить не могу.

Проблема в том, что я не могу найти неактивный объект StatsMenu.
EIvanov
UNIт
 
Сообщения: 103
Зарегистрирован: 05 июл 2021, 17:23

Re: Почему не срабатывает скрипт при переходе на сцену?

Сообщение Saltant 13 окт 2022, 22:34

EIvanov писал(а):
Если на неактивном объекте есть скрипт, то можешь найти этот объект через FindObjectOfType<скрипт>(true)

Скрипт на активном объекте - Player. Этот объект активен всегда.
У этого объекта есть вложенный объект Player->Canvas->StatsMenu.
Проблема в том, что я не могу найти неактивный объект StatsMenu.

Ну так и найди его по чайлдам в чем проблема? transform.GetChild(индекс) и т.д

Хотя конечно проще 1 раз ссылку сделать, или какой нить UIManager запилить (я обычно так делаю).
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2236
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Почему не срабатывает скрипт при переходе на сцену?

Сообщение EIvanov 13 окт 2022, 23:06

Вот видео.
EIvanov
UNIт
 
Сообщения: 103
Зарегистрирован: 05 июл 2021, 17:23

Re: Почему не срабатывает скрипт при переходе на сцену?

Сообщение Saltant 13 окт 2022, 23:08

Ну в плеере сделай ссылку на этот объект и перетащи туда мышкой, не понимаю в чем у тебя проблема.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2236
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Почему не срабатывает скрипт при переходе на сцену?

Сообщение EIvanov 14 окт 2022, 18:15

Ну в плеере сделай ссылку на этот объект и перетащи туда мышкой, не понимаю в чем у тебя проблема.

Я не понимаю как это сделать и как это в Unity работает. :(

Я изучал C#, в том числе и в плане ООП. Парадигмы, этапы компиляции программы, хранение данных в памяти - куча, стек и т.д. Весь код я пишу в скриптах, на C#.
То есть в плане C# у меня есть понимание что я делаю, где это хранится и как это работает.
В плане Unity - нет.

Вот простой пример - действие по нажатию кнопки.


Я не понимаю, почему я должен переносить в поле объект. Почему не скрипт? Или просто подключить скрипт к объекту.
Что это за объект? Статика, экземпляр типа?

Причем скрипт можно повесить на эту же кнопку и перенести эту кнопку в её же поле On Click.
Аналогично и ссылкой.
Я создаю ссылку в коде, с использованием ключевого слова new.

Я не понимаю всех этих "переносов" в плеере.
EIvanov
UNIт
 
Сообщения: 103
Зарегистрирован: 05 июл 2021, 17:23

Re: Почему не срабатывает скрипт при переходе на сцену?

Сообщение Saltant 15 окт 2022, 04:52

Ну тогда открой изучения основ юнити, иначе как ты работать собрался с движком который не понимаешь.
Скрипты которые вешаются на геймобжекты должны наследоваться от Monobehaviour там вся "магия". Через new такие скрипты не создают.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2236
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12