Unity set active не работает

SetActive (true) не работает внутри сопрограммы

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

Я использую сопрограммы для управления этими перезарядками — устанавливаю для gameObject значение false, ожидаю перезарядки, а затем возвращаю gameObject значение true.

Тем не менее, gameObject никогда не активируется снова после отключения. Я не думаю, что проблема с выходом, поскольку комментирование операторов SetActive приводит к тому, что оба сообщения отладки отображаются в правильное время.

Извините, я не уточнил. Я знаю, что сопрограммы не работают с ограниченными возможностями GameObjects . Я написал скрипт PowerUpManager , и он не сработал. Код:

В сценарии PowerUp , в методе OnCollisionEnter2D

В сценарии PowerUpManager

2 ответа

Сопрограммы не запускаются на отключенных игровых объектах!

Вы должны запустить это на другом игровом объекте.

Если вы деактивируете игровой объект, все его компоненты также будут отключены, поэтому Coroutine перестает вызываться.

Что вы можете сделать, это разделить сопрограмму для охлаждения и скрипт, который проверяет столкновение, в 2 отдельных скрипта.

Давайте назовем Cooldown.cs и Powerup.cs . Затем сделайте так, чтобы они перекрестно ссылались друг на друга. В powerup.cs у вас есть

Таким образом, вы не отключаете весь объект, а только скрипт, который проверяет наличие коллизий.

Источник

Не работает SetActive(true)

Здравствуйте, у меня почему-то в ниже приведенном скрипте не срабатывает SetActive(true).
Изначально объект активен. Я его отключаю командой Gun.SetActive(false);
А потом по нажатию на кнопку он должен обратно включиться, НО он не включается и ошибок никаких нет.
Также есть добавить что-то в if (Input.GetKey(KeyCode.B)) — тоже не срабатывает, но если нет строчек SetActive, то срабатывает. Видимо скрипт прекращает выполнение после неудачного SetActive(true).
В чем может быть проблема?

(SetActive(false) работает хорошо)

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Синхронизация объекта с остальными после его включения через GameObject.SetActive(true)
Доброго времени суток, есть такая проблема, есть несколько объектов, к которым прикреплён один.

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

Не работает SetActive
Столкнулся с проблемой, скрипт висит на игроке и когда он сталкивается с другим объектом игра.

Свойства контрола webbrowser: addressbar:true, statusbar:true, menubar:true
Я чайник, конечно, но. решил и я свой броузер написать 🙂 Беру контрол webbrouser, кидаю его на.

Источник

SetActive. Объясните, почему не работает?

Вот есть код. Когда нажиму на клавишу, куб должен появляться, а когда отпускаю пропадать, но ничего не выходит.
Я проверял с помощью debug.log и часть где нажимается левая или правая кнопка мыши и выполняется действие — НЕ РАБОТАЕТ. Почему? Объясните пожалуйста.

2 ответа 2

Вероятнее всего на момент запуска сцены ваш «killcube» уже отключен. Unity не может получать GameObject и его компоненты, если тот отключен SetActive(false) ‘

Чтобы всё заработало, вы должны заранее получить ссылку на ваш GameObject hitb . Проще говоря, в начале получите ещё включённый «killcube» , а потом отключите его методом SetActive(false) .

А, и использование команды GameObject.Find(string name) не выгодно со стороны производительности, легче было перенести ваш объект напрямую в UnityEditor-е.

Читайте также:  Как починить разбитый стакан

Всё ещё ищете ответ? Посмотрите другие вопросы с метками c# unity3d или задайте свой вопрос.

Похожие

Подписаться на ленту

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.10.19.40496

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Источник

Unity3d. Анимация и SetActive

Создал в Unity3d анимацию для кнопки: по наведению курсора кнопка меняет цвет и размер.

Кнопка находится внутри объекта меню.
Есть два объекта меню с кнопками. Единовременно хочу показывать только одно меню.

Условно: есть канвас1 с кнопкой1 и канвас2 с кнопкой2.
Логика следующая:
1.если нажать на кнопку1, то канвас1 скрывается с помощью SetActive(false),а канвас2 появляется с помощью SetActve(true).
2. если нажать на кнопку2, то канвас2 скрывается с помощью SetActive(false),а канвас1 появляется с помощью SetActve(true).

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

Проблема в следующем: на старте приложения активный в данный момент канвас чувствует себя хорошо — все анимации кнопок работают в нужном режиме.
Если переключиться между канвасами на 2,а потом снова на 1(т.е. сначала сделать канвасу1 SetActive(false), а потом опять SetActive(true)), то анимации на кнопках уже не работают(т.е. при наведении курсора кнопка не меняет цвет и размер).

Как быть? Гугл даёт разные результаты и там либо что-то не очень внятное(ну для меня) либо вообще ответы в стиле «о, и у меня такая проблема, помогите и мне»

Кто-нибудь знает, как это решить?
Есть конечно план Б виде замены SetActive(false) на условное изменение координат скрываемого меню на значения, при которых элемент не будет виден зрителю, но это план Б.
Могу в принципе выслушать вообще что-то на тему проектирования меню(может я задачу с переключением неверно решаю), но в приоритет всё же решение проблемы с SetActive.

UPD: Залил небольшое демо с последней версией проблемы: http://rgho.st/7wNJhGsC6

Скорее всего ты описал не все, что происходит с кнопками и канвасами, т.к. при такой конфигурации все будет работать (у самого есть такие таб-группы). Возможно где-то выключаешь BlockRaycast или Interactable. Также нужно учесть что анимация может пропускать ключи при воспроизведении и включение может просто не вызываться. Это решается тем, что пишется кастомный StateMachineBehaviour который ловит входы/выходы из/в состояния и производит нужные действия.

Signa
> Возможно где-то выключаешь BlockRaycast или Interactable.

Я точно не делаю это. Я даже не писал скрипты под переключение. Просто в интерфейсе компонента Button(там, где можно добавить обработчики клика) добавил нужный мне канвас(с помощью перетаскивания) и выбрал среди методов класса gameObject метод SetActvie. И сказал, что по клику должен он вызываться с false.

Есть другая деталь(может быть это важно). Кнопки у меня живут не в самом канвасе. Там немного более сложная иерархия(просто не думал,что это важно). На самом деле там что-то вроде: канвас, в нём какой-нибудь объект с гридом, в нём ещё какой-нибудь объект и потом уже внутри него кнопка.

Signa
> у самого есть такие таб-группы
Я одним канвасом обошелся.

Читайте также:  Как настроить яндекс новости под себя

snowslip
> Просто в интерфейсе компонента Button(там, где можно добавить обработчики
> клика) добавил нужный мне канвас(с помощью перетаскивания) и выбрал среди
> методов класса gameObject метод SetActvie. И сказал, что по клику должен он
> вызываться с false.
Может с канвасами напутал?

Советую сделать пустой проект с канвасом/двумя, анимацией и на нем разобраться.

smartxp
> Может с канвасами напутал?

1. Канвасы скрываются же нормально.
2. А это должны быть именно канвасы? Допускаю, что может быть SetActive вызывается у меня на каком-то элементе, который не является канвасом, но сам его содержит.

А зачем для этого 2 канваса? Почему не 1 канвас и 2 fullscreen панели?

Ну просто потому что это домашняя разработка человека, который самоучится делать что-то на Unity, и в тот день я знал про Unity столько, что выбранное решение казалось нормальным 🙂
К слову(оно всё ещё кажется нормальным :), потому что «а почему нет?»)

Собрал все как у тебя и оно прекрасно работает на Unity 2017.4.2f2. Значит где-то накосячил и пока не видишь.

хорошо, попробую правда собрать в простой конфигурации. В конце концов, если не будет работать, смогу продемонстрировать.

Хотя правда не понимаю, чему там ломаться)

Но советы всё ещё принимаются!:)
(свой тест смогу только в выходные провести)

И вот я вернулся. И воз всё ныне там, к сожалению. Хотя новая деталь: не все кнопки ломаются.
Создал самый простейший вариант сцены.
Канвас у меня всё же тоже один.
Внутри пара объектов, для которых вызывается SetActive.

вот элементы на сцене(выделил кнопки специально):http://joxi.ru/D2PJGEgUpaLKLr
1. в элементе PlayerSkills три кнопки:
Undo — моя кнопка(ломается)
Ok — моя кнопка(работает нормально)
BasicOutlineGray — кнопка из стороннего ассета(работает нормально). добавил её, чтобы показать, что она тоже работает. Надеялся посмотреть на настройки анимации этой кнопки и найти отличие от своих настроек, но отличий не нашёл(кроме, разумеется, параметров, которые анимируются)

2. SelectLevel, две кнопки:
MainMenu — моя кнопка(ломается)
Skills — моя кнопка(работает нормально)

по нажатие кнопки Ok появляется другой элемент вот так:
http://joxi.ru/Drl6RlKtv3lPW2

по нажатие кнопки Skills идём обратно к первому экрану.

И вот кнопки Skills и Ok(которые в момент перехода по сути остаются по курсором) исправно работают. Что странно, вот эта сторонняя кнопка «Gray» тоже исправно всегда анимируется. Проблема только с кнопками MainMenu и Undo.

Сам клик кнопки обрабатывают исправно. Ломается только механизм анимации.

Если скопировать одну из рабочих кнопок(например Ok) и перетащить чуть в сторону, то Ok будет работать,а её дубль уже нет. Складывается ощущение, что дело в том, что в момент перехода у меня над кнопкой висит курсор и это каким-то образом создаёт ситуацию, при которой она становится рабочей в отличии от других кнопок, на которыми курсор не висит

Короче, я вроде бы разобрался с этим.

Судя по всему, SetActive как-то странно действует на анимацию. Я заметил, что у меня анимация не просто не работала. Когда я переключаюсь на элемент очередной раз, объект находится в состоянии, которое всё же ближе к конечному состоянию анимации.
Судя по всему, после вызова SetActive(false) и SetActive(true) элемент у меня не понимал, что ему нужно из состояния «Подсвечен»(для которого я изначально прописал анимацию) вернуться в в состояние Normal, когда SetActive вызываем с true. Точнее элемент-то переходил в Normal, внешний вид свой не менял.
Проблема решилась таким образом: для состояния Normal я прописал явно анимацию, которая приводит элемент в исходное, не подсвеченное, состояние.

Читайте также:  2гис не работает геолокация

Итого сейчас у меня примерно так: на кнопке две анимации:
1. Для состояния «Подсвечен»: растягивает кнопку, меняя размеры из 1 в 1.2.
2. Для состояния «Нормал»: обратно «стягивает кнопку», меняя размеры от 1.2 до 1.

В итоге все анимации работают корректно)

Всем спасибо за помощь. Буду рад увидеть более экспертные комментарии, т.к. моё объяснение чисто прикладное — я пока понял, как чинить, но не понял до конца, почему ломается(бай дизайн юнити что ли или хз).

Если клик проходит, а анимация ломается, то проблема может быть ещё и в другом. При включении объекта происходит инициализация аниматора. В этот момент, все поля, на которые влияет аниматор кешируются. При входе в какое-то состояние, эти поля затираются на кешированные (та самая галочка WriteDefaults на состоянии).

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

Но этого не заметишь, если аниматор меняет лишь масштаб на всех клипах, т.к. это свойство итак дергается всеми клипами.

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

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

Ещё есть рекомендация выключать не объект окна, а сам канвас. Иначе при включении вновь начинается перерасчет разметки и прочая ерунда.

Источник

не работает SetActive

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Не работает SetActive(true)
Здравствуйте, у меня почему-то в ниже приведенном скрипте не срабатывает SetActive(true).

Метод SetActive для Text
Как мне сделать так, чтобы при вызове метода текст скрывался? public void SelectBoss1() < .

Синхронизация объекта с остальными после его включения через GameObject.SetActive(true)
Доброго времени суток, есть такая проблема, есть несколько объектов, к которым прикреплён один.

GameObject.SetActive(); По нажатию кнопки — появление объекта, при повторном нажатии, исчезание объекта
Привет. Не знаю, как сделать скрипт, который при нажатии кнопки делал GameObject активным , а при.

не пользуюсь я PlayerPrefs но попробую предложить для начала

ну и сделайте код где и чем у вас PlayerPrefs on off устанавливаются, предполагаю что у вас две кнопки он и офф судя из свича и имен объектов разных, вешаете на каждую кнопку отдельный скрипт

как разберетесь сделаете красивее. это так для начала чтоб понять

Добавлено через 14 минут
увидел скриншот с кнопками, если кнопка одна и меняете в ней спрайт с картинкой на он или офф, то вот в те методы где спрайт меняете соответственно вставьте PlayerPrefs.SetString

SetActive() и ошибка !(!IsActive () && !GetRunInEditMode ()
Доброго дня использую метод SetActive() для GameObject’а, по кнопке включаю его и выключаю. И всё.

Мышь работает через раз, то есть запустил ОС — мышь не работает, перезагрузил — мышь работает
Установлена Windows 7 со всеми последними обновлениями. Все всегда замечательно работало. Но с.

Не работает скомпилированный EXE файл хотя в самой среде игра работает
Я почти закончил разработку своей игры на Unity2D но после запуска скомпилированного EXE файла.

Источник

Оцените статью