|
|
|
Канал Игры Мечты: «Unity -- учим вместе» |
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
В рантайме изменение префаба не поменяет уже Instansiated объекты. Instanciate это "сделать копию".
Чтобы поменять все созданные камеры - надо поменять все созданные камеры самому через скрипт. Это если ты в рантайме работаешь.
_________________ MOV topka, C++ |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Их я не вручную инстнацировал, а они как префаб на сцене.
Jurec : |
В рантайме изменение префаба не поменяет уже Instansiated объекты.
|
Понятно, спасибо.
Есть идея, что здесь это может быть объяснено порядком развертывания. Т.е. если во время загрузки сцены идут события 1) инстанцирование камеры 2) запуск Start() объекта на сцене - то тогда изменение префаба в старте на камеру не влияет; если же сначала 2, потом 1, то влияет.
_________________ μηδείς αγεωμέτρητος εισίτω
Последний раз редактировалось: Minx (23:35 27-03-2019), всего редактировалось 1 раз |
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
надо проверить, но вроде как при компиляции билда все префабы разворачиваются в конкретные инстансы. и тогда все равно какой порядок
_________________ MOV topka, C++ |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
У меня подобные ощущения когда пару недель назад собрали картинку из нескольких составляющих, где A лежит на Б. В Unity никто ничего не замечал, все ок. Ставим на телефон - А пропадает. Через некоторое время обнаруживаем, что А и Б на одном слое, но в зависимости от фазы Луны оно лежит либо так что А видно, либо так что не видно.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
seaman
59 EGP Репутация: 2 Сообщения: 18 Откуда: Самара Зарегистрирован: 15.01.2017
 |
|
Цитата: |
Если перетащить на ссылку (_camera) префаб который оригинальный префаб в директории со всеми префабами, то глюк есть. Если перетащить инстанцированный префаб, то глюка нет.
|
Ну так и должно быть.
Ссылка на префаб - это ссыслка на "описание объекта", а не на сам объект. И изменение его ни к чему не приведет. По идее не должно ничего менять и в редакторе. Если меняет - вот это видимо глюк.
Сам объект у Вас на сцене. Перетаскиваете его - все работает, т.к. это и есть реальный объект.
добавлено спустя 3 минуты:
Цитата: |
А и Б на одном слое
|
Это спрайты? Не UI?
В UI все достаточно четко. То что ниже в иерархии - отрисовывается поверх того что выше.
Если просто спрайт, то там да - бывает и так и так. Лучше разделять по слоям для четкого порядка.
Последний раз редактировалось: seaman (16:18 28-03-2019), всего редактировалось 1 раз |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
seaman : |
По идее не должно ничего менять и в редакторе.
|
Берём префаб-камеру и 2 сцены, помещаем префаб-камеру на ту на ту сцену. Изменяем префаб - изменяются обе камеры на сценах.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
seaman
59 EGP Репутация: 2 Сообщения: 18 Откуда: Самара Зарегистрирован: 15.01.2017
 |
|
При чем тут то, что ты сейчас написал и твой код, который пытается что-то в префабе изменить?
|
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
То, что написал, относится ко всей теме.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
seaman
59 EGP Репутация: 2 Сообщения: 18 Откуда: Самара Зарегистрирован: 15.01.2017
 |
|
Изменение префаба в редакторе и попытка изменения префаба кодом - абсолютно разные вещи.
В первом посте ты пытался изменить его кодом. Что тебе Юнити не дала сделать и на что я тебе указал. Префаб - шаблон объекта. Создается и меняется только в редакторе. Изменить в билде его просто невозможно.
Потом ты пишешь: измени префаб в редакторе он изменится во всех сценах. Естественно изменится. Ты изменил шаблон. Объекты созданные по измененному шаблону будут естественно другими.
Но как связано одно с другим? Только тем, что это твои сообщения?
|
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
seaman : |
Что тебе Юнити не дала сделать
|
Unity даёт это сделать, с этого всё началось.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
seaman
59 EGP Репутация: 2 Сообщения: 18 Откуда: Самара Зарегистрирован: 15.01.2017
 |
|
Да ну! А что ж ты тогда вообще вопрос задавал, раз все дает?
|
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Вопрос про вызов кликовых событий.
Есть клики от пользователя (mouse down, touch, on drag, ...). Есть элементы UI и элементы сцены. Хочется грамотно перехватывать только нужные события. Например:
- есть на сцене перекрывающиеся объекты A и Б, сделать так, что в случае перекрытия задний Б не получал события, а только передний А;
- есть на сцене передний А и фоновый В, сделать так, чтобы В всегда ловил;
- есть на сцене А, есть Г как элемент UI, и они перекрываются; сделать так, чтобы А ловил (например, окончание перетаскивания);
- есть состояние игры-приложения; в зависимости от него объекты ловят события или нет, пропускают клик на фон или нет, ...
... и т.д.
На практике зачастую слабопредсказуемый рандом. Думал что есть внятное описание как это устроено в Unity, начал искать, и пока что нашел только страдания (1 2 3 и т. п.). Народ походу пишет велосипеды для управления подобными вещами.
Этот вопрос все в том же состоянии в Unity? Есть ли хорошее описание механизмов как это устроено чтобы самому все потом разрулить? По-прежнему лучше велосипедить?
P.S. Сейчас актуально про 2D, но не помешало бы и с 3D подразобраться. Насколько понял, они идут отдельно.
_________________ μηδείς αγεωμέτρητος εισίτω
Последний раз редактировалось: Minx (16:11 09-05-2019), всего редактировалось 1 раз |
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
Все 3 вопроса, линки на которые ты дал, это 2014 год, до выхода Unity UI. Конечно все не в таком состоянии как там описано.
Для 2d есть https://docs.unity3d.com/ScriptReference/EventSystems.IPointerClickHandler.html
https://docs.unity3d.com/ScriptReference/EventSystems.IEndDragHandler.html
и компания
Насчет перекрытия ивентов - https://docs.unity3d.com/ScriptReference/UI.Graphic-raycastTarget.html
Для 3d ты должен делать рейкасты сам.
_________________ MOV topka, C++ |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Хорошо, спасибо. Покопаю в этом направлении. Раньше делал всякими OnMouseDown, OnEndDrag, ... Сейчас попробовал через IPointerClickHandler, и оно по умолчанию так понимаю обрабатывает как первый случай моего списка, а там дальше нужно бросать лучи в соответствующем контексте.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
Кстати, OnMouseDown, OnEndDrag должны работать на 3d объектах. Но это все старые штуки, посмотри лучше какие-то туториалы по UI.
Minx : |
а там дальше нужно бросать лучи в соответствующем контексте
|
Да, можешь как-то так:
ссылка
_________________ MOV topka, C++ |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Есть GameObject, у которого много дочерних 2D изображений (компонентов с SpriteRenderer, TextMesh и т.п.)
Хочется:
1) запомнить текущее состояние;
2) сделать всем новый Transparent (например, уменьшить на 50%).
3) через некоторое время вернуть Transparent обратно.
Как-то не нашёл простого решения. Пробую перебрать все дочерние, найти в них все SpriteRenderer/TextMesh где есть Color, сохранить ссылки в массиве. Далее отдельной процедурой меняются цвета через перебор массива, и аналогично процедура восстановления.
С учетом того, что Color это property, на которую просто так ref не повесить, все выходит жестоко. Может есть более простые решения?
В идеале хотелось бы что-то типа Canvas Group, но он только для UI.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
seaman
59 EGP Репутация: 2 Сообщения: 18 Откуда: Самара Зарегистрирован: 15.01.2017
 |
|
Ну найти все нужные компоненты в дочерних в иерархии элементарно
var rends = GetComponentsInChildren<SpriteRenderer>();
|
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
seaman : |
var rends = GetComponentsInChildren<SpriteRenderer>();
|
Minx : |
Пробую перебрать все дочерние
|
Эта фаза так и делается.
У меня в принципе получилось, но то, что делает Canvas Group одним полем-числом, это заняло 150-200 строк и привязано к SpriteRenderer/TextMesh (появится третий рендер, надо будет словить проблему и вписать дополнительно).
_________________ μηδείς αγεωμέτρητος εισίτω
Последний раз редактировалось: Minx (22:17 16-06-2019), всего редактировалось 2 раз(а) |
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
только еще юзай MaterialPropertyBlock для установления цвета, так намного быстрее чем напрямую color менять
_________________ MOV topka, C++ |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
MaterialPropertyBlock еще ни разу не использовал, но да, надо потиху его изучить.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
|
|
|
Канал Игры Мечты: «Unity -- учим вместе» |
|