Доступ к скрипту удаленного GameObject

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

Доступ к скрипту удаленного GameObject

Сообщение Gish 22 сен 2020, 22:52

Не понятно мне как, но так получилось что я удаляю объект (У дочернего объекта есть скрипт), после некоторых манипуляций я создаю новый объект идентичный старому (С префаба загружается) после хочу связаться с новым скриптом в дочернем объекте, но так получается что юнька не отстает от страсти к старому (Удаленному) объекту, и каким то образом указывает на скрипт удаленного объекта (Вместо нового). Каждый раз когда я хочу обратиться к скрипту, я указываю на новый объект (Нет никаких привязок к старому). Таким образом this.gameObject == null, а переменная внутри null объекта существует. Скрипт сам по себе не может жить, так как привязывается к объекту и через него ищет другие объекты. Ошибок нет, кроме уведомления о том что когда код доходит до this.gameObject.переменная, выводит ошибку о его не существовании. Помогите выйти на верный путь и не говорить с умершими.

Изображение

Вот как это выглядит.
Gish
UNец
 
Сообщения: 19
Зарегистрирован: 28 апр 2020, 19:57

Re: Доступ к скрипту удаленного GameObject

Сообщение samana 22 сен 2020, 23:22

Gish писал(а):Скрипт сам по себе не может жить, так как привязывается к объекту

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

Gish писал(а):Каждый раз когда я хочу обратиться к скрипту, я указываю на новый объект (Нет никаких привязок к старому).

Здесь без кода ничего невозможно подсказать. Возможно где-то логическая ошибка в коде, которая и приводит к таким результатам.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Доступ к скрипту удаленного GameObject

Сообщение Gish 23 сен 2020, 19:28

Код огромный и не один. Логическая ошибка не исключена. Попробую рассказать моменты которые происходят. Начнем.

Во первых каждый из объектов имеет public class Класс: MonoBehaviour. В них хранится многое.
Внутри MonoBehaviour нет ни одного класса (Удивительно) и ни одной статической переменной. Таких объектов много (Неограниченное количество).
Некоторые создаются вначале сцены, а некоторые по кнопке. Те что по кнопке имеют следующую структуру (Отец-сын-сына_сын).
Мать создает отца, отец создает сына, тот создает сына_сын и тут же получает мороженку в лицо. (Мороженка это у нас наш скрипт)
каждый созданный сыном сына_сын сохраняется у матери в листе. (Возможно она и убивает их, но мы не детективы).
В сына_сын стоит этот самый скрипт. Удаление происходит отца. Может тут проблема? Убивать отцов нужно ведь в последнюю очередь?
Уничтожение происходит с помощью связи сына с отцом (Destroy(List[Son].GetComponentInParent<Killmeplease>().gameObject);
После уничтожения семьи, мать очищает лист внуков и решает найти нового отца по нажатию кнопки. Новый отец рожден, а он рождает детей. После по старой схеме.
Мать создает отца, отец создает сына, тот создает сына_сын и тут же получает мороженку. Только вот тут почему то мороженка падает в гроб старого внука. (Дело раскрыто детективами, но нам предстоит узнать почему мороженка попадает в гроб старого внука)
Gish
UNец
 
Сообщения: 19
Зарегистрирован: 28 апр 2020, 19:57

Re: Доступ к скрипту удаленного GameObject

Сообщение waruiyume 23 сен 2020, 19:40

https://coub.com/view/10opll

Destroy не уничтожает объект немедленно, уничтожение происходит в какой-то момент до начала следующего кадра.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Доступ к скрипту удаленного GameObject

Сообщение Gish 23 сен 2020, 19:49

Там проходит достаточно много кадров.
(Игрок успевает через время нажать снова на кнопку).
Удаление и создание нового и обращение к новым не в один момент.
Gish
UNец
 
Сообщения: 19
Зарегистрирован: 28 апр 2020, 19:57

Re: Доступ к скрипту удаленного GameObject

Сообщение waruiyume 23 сен 2020, 20:05

this.gameObject == null

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

(bool)this
тоже false возвращает?
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Доступ к скрипту удаленного GameObject

Сообщение Gish 23 сен 2020, 20:13

Изображение

False.
this == null;
Делегаты не используются
Gish
UNец
 
Сообщения: 19
Зарегистрирован: 28 апр 2020, 19:57

Re: Доступ к скрипту удаленного GameObject

Сообщение waruiyume 23 сен 2020, 20:17

Ну ещё раз тыкну пальцем в небо, без кода- это единственное, что остаётся, ну ещё гадание на кофейной гуще.
Вы из коллекции объект не удалили когда Destroy вызвали, а элементы коллекции при дестрое никуда не денутся.

P.S. монобехи лучше не на null проверять, а кастовать в bool, т.к. в редакторе бывает null который не null, правда это крайне ситуация.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Доступ к скрипту удаленного GameObject

Сообщение Gish 23 сен 2020, 20:26

Почти попали пальцем. К сожалению небеса далеко.
Коллекции не используются, только лист. Лист очищается за пару строчек до удаления объекта. (Слот пуст, лист пуст).
List.Clear();
Когда в следующий раз игрок пихает в слот объект, объект добавляется в лист.
List.Add(Item);
При нажатии на кнопку создается объект, который забирает из листа соответственный ему по id объект (То есть 0 из листа). Все хорошо, пока тема не доходит до того, что бы объект показал данный предмет. (То есть он сохраняет в себе нужные данные и.т.д).


Монобех вообще представляет из себя микро базу данных о объекте который сидит в коде, который пока приходит, создается по пути в ячейку. Как раз сам предмет проверяется на null, но есть моменты где я использую this.gameObject.tag. То есть через монобех, выхожу к объекту дабы проверить его тэг на соответствие с кондициями. Существование монобеха нигде не проверяется.
Если я правильно понял.
Последний раз редактировалось Gish 23 сен 2020, 20:34, всего редактировалось 2 раз(а).
Gish
UNец
 
Сообщения: 19
Зарегистрирован: 28 апр 2020, 19:57

Re: Доступ к скрипту удаленного GameObject

Сообщение waruiyume 23 сен 2020, 20:32

Коллекции не используются, только лист.

Сильное заявление :-B

Ну тады шарьте код, ибо экстрасенсы в отпускУ.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Доступ к скрипту удаленного GameObject

Сообщение Friend123 24 сен 2020, 08:21

А что если изменить сам подход к задаче?
Например, неканонично удалять/создавать объекты, для этого используется всем известная система "Пул объектов". Пул создается при загрузке сцены один раз. А дальше им можно распоряжаться как угодно, в использовании прост.
Аватара пользователя
Friend123
Старожил
 
Сообщения: 701
Зарегистрирован: 26 фев 2012, 22:12
Откуда: Тверь
  • ICQ

Re: Доступ к скрипту удаленного GameObject

Сообщение Gish 26 сен 2020, 18:48

Friend123 писал(а):А что если изменить сам подход к задаче?
Например, неканонично удалять/создавать объекты, для этого используется всем известная система "Пул объектов". Пул создается при загрузке сцены один раз. А дальше им можно распоряжаться как угодно, в использовании прост.



Спасибо большое. Это хорошая идея и подойдет к данной системе. Так и сделаю.
Gish
UNец
 
Сообщения: 19
Зарегистрирован: 28 апр 2020, 19:57


Вернуться в Почемучка

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 13