Показать сообщение отдельно
Старый 18.09.2020, 20:21   #3
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений
(для 5,374 пользователей)
Ответ: Вызов гуя, есть проблемы.

Сообщение от pax Посмотреть сообщение
Я бы не открывал гуй с скрипта на монстре, а открывал гуй тем скриптом, которым ты его скрываешь. Пусть этот скрипт палит где ты кликнул, если - монстр - открой гуй монстра, если другое место - скрыть гуй. Ну и соответственно клик на другом монстре обновит открытый гуй.

PS: еще есть конечно фича явного указания порядка обработки скриптов Script Execution Order, но это только в экстремальных случаях)
Гуй отображает и скрывает отдельный скрипт, а скрипты на монстрах
отрабатывают пики лучём и щелчки клавишами, результат отработки
идёт в переменные глобального скрипта, а вот за ними следит скрипт
который скрыванием и отображением гуя занимается,
этот скрипт к префабу юнита не привязан, он привязан к независимому
объекту на сцене.

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

Проблема грубо говоря в том, что я мышкой юнитов выделяю,
одновременно может быть выделен только один, и вот когда
у меня уже есть выделенный юнит, и я хочу выделить другого
не сбросив выделения с первого, то по логике скрипта когда
я навёл на нового юнита луч и клацнул мышью, в него полетел луч,
что привело к выделению юнита в последствии, но к этой же самой
клавише мышки в скрипте привязано снятие выделения с юнита,
по тому, что мне так надо. Так вот значит у меня уже один выделенный,
я хочу вместо него выделить другого не сбрасывая предварительно
выделения у первого, оно должно само сброситься при выделении нового,
стреляю в нового лучом, он выделяется, появляется гуй, но перед этим
у старого юнита должно произойти снятие выделения, и гуй должен исчезнуть, чтобы у нового он появился,
и это работает в 70% случаев, но в 30% порядок меняется,
случайно, просто юнити решает, а давай ка я сначала займусь
обработкой скрипта вон того юнита, а не этого, и хопа у меня баг,
я на новом юните вместо отображения гуя получаю его скрытие,
по тому что старый юнит кинул переменную закрытия в следящий
за этим делом скрипт.

Блин, я надеюсь доходчиво процесс описываю, мне то понятно что я пишу,
но понятно ли вам неизвестно ))

Короче, я никогда не сталкивался с такими проблемами в блитце,
а ведь у меня есть на нём прототип RTS, но тут же с этими префабами,
и непонятно как обрабатываемыми скриптами я проблему победить
пока не могу.
Я просто не могу задать порядок выполнения процессов в одинаковых
скриптах одинаковых префабах в нужной последовательности
при определённых обстоятельствах.

Рано или поздно я это сделаю, правда даже не представляю что за монстра
мне придётся породить, это будет что-то наверное работающее
через задницу.

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

Добавлю: скрытие гуя реализовано так, что оно может произойти только
на втором прогоне скрипта после выделения юнита, и прописано оно раньше,
чем область кода отвечающая за отображение гуя. По идее, раз скрипт у всех
юнитов одинаковый, и они одинаково отслеживают нажатия клавиши,
то при одновременном срабатывании скрипта везде, сначала по порядку должно
произойти скрытие гуя на старом юните, а после открытие на новом.
Но как я теперь понимаю, юнити обрабатывает одинаковый скрипт на каждом префабе по очереди,
а не одновременно, и очерёдность обработки он выбирает сам по рандому, по воле аллаха.
Если бы мне удалось задать очерёдность обработки скриптов,
понижать и повышать статус важности выполнения,
тогда бы юнити делал то, что мне нужно.
Подчёркиваю, очерёдность обработки одного и того же скрипта на одинаковых префабах.
Можно поставить таймер на отображение гуя в пол секунды, но игрока будет раздражать, это не решение.
__________________
Проект "Deathbring World - Rangers" и его финансовая поддержка:
https://boosty.to/deathbringrangers

Я на - TWITCH
Канал на YouTube
(Offline)
 
Ответить с цитированием