Пятница, 29 Марта 2024, 09:41

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Отключаемый скрипт продолжает работать
Отключаемый скрипт продолжает работать
ShortKedrДата: Суббота, 31 Октября 2015, 20:43 | Сообщение # 21
Renword Studio
Сейчас нет на сайте
Цитата seaman ()
Затем, что без него это будет совсем другая функция, которую никто никогда вызывать не будет. Т.е. просто совершенно бесполезная.

С чего вы это взяли. Всё спокойно вызывает. Для вашего кода это функция, для класса MonoBehavior это сообщение (что то типа делегата). То есть класс MonoBehavior вызывает 2 сообщения где то у себя в коде, если они прописаны в вашем коде(то есть присвоены). Но в OnTriggerStay(Collider collider) передаётся коллайдер игрока, а в OnTriggerStay() нечего не передаётся, что делает его более лёгким(так сказать)

Добавлено (31 октября 2015, 20:43)
---------------------------------------------
Раньше о таком 2 варианте этого сообщение, вроде как, было даже записано в документации. И с тех пор, до сих пор существует)


Сообщение отредактировал ShortKedr - Суббота, 31 Октября 2015, 20:44
seamanДата: Суббота, 31 Октября 2015, 20:47 | Сообщение # 22
старожил
Сейчас нет на сайте
У делегатов тоже есть сигнатура и по идее метод не должен вызываться. Более того, если есть нормальный метод (с параметром) - он и не вызывается.
В документации нет сообщения без параметра. Видимо - это недостаток документации.
Интересно много ли таких методов, которые вызываются, наплевать на сигнатуру?
ЗЫ: если раньше было в документации - возможно метод без параметра устаревший. Значит в любой момент может пропасть...


Сообщение отредактировал seaman - Суббота, 31 Октября 2015, 20:48
ShortKedrДата: Суббота, 31 Октября 2015, 21:04 | Сообщение # 23
Renword Studio
Сейчас нет на сайте
Цитата seaman ()
Более того, если есть нормальный метод (с параметром) - он и не вызывается.

Unity на вторую вариацию метода поругается(по идее). То есть он может быть только один. Следовательно, если нам нужно обращаться к стороннему коллайдеру, то мы прописываем этот параметр, если не нужно, то не прописываем.

Похоже, что это даже не делегаты и не просто функции класса, тк нет ни какой перезаписи методов и сигнатуры разные. Похоже это само ядро Unity их обрабатывает, как в чистом C# функция входа в программу. Мы ведь ей не пишем override или ещё что то, тк это ядро языка. Поэтому и допускается такая запись

Добавлено (31 октября 2015, 21:01)
---------------------------------------------
Цитата seaman ()
ЗЫ: если раньше было в документации - возможно метод без параметра устаревший. Значит в любой момент может пропасть...

не факт, что оно было) Я впервые это не из документации взял)

Цитата seaman ()
Интересно много ли таких методов, которые вызываются, наплевать на сигнатуру?

Вроде только связанные с триггерами и коллизиями, больше не видел пока


Сообщение отредактировал ShortKedr - Суббота, 31 Октября 2015, 21:08
seamanДата: Суббота, 31 Октября 2015, 21:33 | Сообщение # 24
старожил
Сейчас нет на сайте
Цитата
Unity на вторую вариацию метода поругается(по идее).

Не ругается. Во всяком случае ошибки нет.
ShortKedrДата: Суббота, 31 Октября 2015, 21:34 | Сообщение # 25
Renword Studio
Сейчас нет на сайте
Цитата seaman ()
Не ругается. Во всяком случае ошибки нет.

Ну, прикольно) разобрались)
KamiRoninДата: Суббота, 31 Октября 2015, 21:55 | Сообщение # 26
почти ветеран
Сейчас нет на сайте
ИСПРАВЛЕНО 01/11/15:
OnTriggerEnter без параметров не сработает при попадании стороннего коллайдера в триггер, т.е. не будет вызвано.
Ругаться юнити не будет - т.к. это просто "другая" функция для него.

Т.ч. сигнатура неизменна! Никаких "если не надо обращаться к столкнувшемуся коллайдеру то можно опустить" - все четко и ясно.. Если событие вообще должно отлавливаться - то пишем по сигнатуре - с параметром Коллайдер! )

Unity разрешает обе формы записи - и параметрическую и безпараметрическую всех событий по коллизиям.


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.


Сообщение отредактировал KamiRonin - Суббота, 31 Октября 2015, 23:31
ShortKedrДата: Суббота, 31 Октября 2015, 23:13 | Сообщение # 27
Renword Studio
Сейчас нет на сайте
Цитата KamiRonin ()
OnTriggerEnter без параметров не сработает при попадании стороннего коллайдера в триггер, т.е. не будет вызвано.
Ругаться юнити не будет - т.к. это просто "другая" функция для него.

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

Я не понимаю, откуда вы берете такую инфу? wink Причём совершенно не соответствующую истине!

Смотри внимательно на скриншоты:



Добавлено (31 октября 2015, 22:58)
---------------------------------------------
Прежде чем говорить чужие глупости, сами проверьте истинность утверждения! Нечему нельзя верить наслово
Да, и это немного другое событие! Их по 2 типа существует. Большинство людей, которые программировали в 3 версии знают об этом приколе)
Это всего лишь 2 разных записи метода. В один передаётся коллайдер, с которым мы столкнулись. В другой нечего не передаётся, он просто вызывается без параметров, а значит как один из доступных вариаций. Перезагрузка метода, если не знаете.

Добавлено (31 октября 2015, 23:13)
---------------------------------------------
Цитата ShortKedr ()
пишем по сигнатуре - с параметром Коллайдер! )

Существуют 2 сигнатуры, так сказать. Они обе рабочие и используются ядром Unity для вызова соответствующих сообщений (событий)
В самом ядре Unity они прописаны по разному:
например:
Код

    delegate void OnTriggerEnter();
    delegate void OnTriggerEnterParam(Collider collider);


Т.к. OnTriggerEnter просто функция в MonoBehaviour, следует, что Unity сам соединяет их с нужными делегатами


Сообщение отредактировал ShortKedr - Суббота, 31 Октября 2015, 23:22
KamiRoninДата: Суббота, 31 Октября 2015, 23:25 | Сообщение # 28
почти ветеран
Сейчас нет на сайте
smile мдааа.. скриншотов насовал на целую презентацию.. не лень жеж было.. )

Цитата ShortKedr ()
Я не понимаю, откуда вы берете такую инфу?

честно сказать - старый опыт.. когда писал в скриптах без переменных - не мог понять почему не ловились события.. и приучил себя ставить с сигнатурными переменными..
меня удивило конечно что 3 версия упоминается - я как раз там словил этот опыт.. хотя столько времени прошло... нарывался тогда несколько раз на неполном написании - точно помню... )

так что
Цитата ShortKedr ()
сами проверьте истинность утверждения
- это как раз оттуда..
сейчас конечно смысла спорить нет - действительно две сигнатуры позволяет.. причем если ставить одновременно в скрипте и безпараметрическую и параметрическую версию - то срабатывает только первая по записи в скрипте! smile Для меня это все еще странно.. Мелочь, а неприятно..

так что о могучий скриншотер ShortKedr, признаю, возможны два варианта сигнатур! )


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
ShortKedrДата: Суббота, 31 Октября 2015, 23:31 | Сообщение # 29
Renword Studio
Сейчас нет на сайте
Ну кстати, я тут покапался в коде MonoBehaviour. У него есть функции оправки сообщений и их обработки. Это и объясняет то, что Update, Start и т.д. - это никакие не делегаты.
Насколько я помню в 3 версии тоже работало 2 варианта. Но может вы с более старой версии начали. У меня была где-то 3.4

Пожалуй шикарный механизм с сообщениями)

Добавлено (31 октября 2015, 23:31)
---------------------------------------------

Цитата KamiRonin ()
причем если ставить одновременно в скрипте и безпараметрическую и параметрическую версию - то срабатывает только первая по записи в скрипте! Для меня это все еще странно..

Ну похоже ловит только первую найденную вариацию, выполняет и прекращает функцию отлова подобных методов


Сообщение отредактировал ShortKedr - Суббота, 31 Октября 2015, 23:30
KamiRoninДата: Суббота, 31 Октября 2015, 23:33 | Сообщение # 30
почти ветеран
Сейчас нет на сайте
Цитата ShortKedr ()
Пожалуй шикарный механизм с сообщениями)

бродкастинг.. я не стал об этом писать - думал это и так понятно раз оверрайдеры не используются.. :)
Цитата ShortKedr ()
У меня была где-то 3.4

да, у меня 3.5 версия в которой я с коллизиями заморочился..


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
ShortKedrДата: Суббота, 31 Октября 2015, 23:36 | Сообщение # 31
Renword Studio
Сейчас нет на сайте
Цитата KamiRonin ()
бродкастинг.. я не стал об этом писать - думал это и так понятно раз оверрайдеры не используются.. :)

Да, знаю smile

Пока Unity будут улучшать и улучшать, такие споры не будут кончаться smile


Сообщение отредактировал ShortKedr - Воскресенье, 01 Ноября 2015, 00:01
seamanДата: Воскресенье, 01 Ноября 2015, 13:32 | Сообщение # 32
старожил
Сейчас нет на сайте
О! и KamiRonin на этом попался.
Я тоже сначала написал достаточно жестко, что без параметров работать не будет. И тоже из какого-то предыдущего опыта. Потом прежде чем отправить решил проверить и был неприятно удивлен! Оказывается будет...
ShortKedrДата: Воскресенье, 01 Ноября 2015, 13:59 | Сообщение # 33
Renword Studio
Сейчас нет на сайте
Ну, нечего! Главное, что опыта прибавилось и во всём разобрались. Мы же не будем ругаться из за этого smile

Сообщение отредактировал ShortKedr - Воскресенье, 01 Ноября 2015, 14:00
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Отключаемый скрипт продолжает работать
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг