Как скрыть ui объекты в unity?
Всем привет. Перепробовал кучу скриптов, не одна не подошла. У меня есть ui button и при клике на него должна сработать следующее. layout.gameObject.SetActive(false); Но все, что я пробовал делал из интернета либо не работает, либо сразу пропадает без нажатие на кнопки. Как быть? Скрипт к кнопке привязал. layout к объекту тоже привязал, box collider 2d тоже сделал (увидел в каком то уроке). Это последнее что я пробовал:
using UnityEngine; using System.Collections; public class Button_close : MonoBehaviour < public GameObject layout; // Assign in inspector void OnGUI() < layout.gameObject.SetActive(false); >>
Скрины Привязка к кнопке:
Отслеживать
71.1k 12 12 золотых знаков 90 90 серебряных знаков 180 180 бронзовых знаков
задан 9 апр 2017 в 4:29
115 1 1 золотой знак 1 1 серебряный знак 9 9 бронзовых знаков
выложи код в котором сразу пропадает без нажатия
9 апр 2017 в 4:34
Обновил. с этим кодом сразу пропадает
9 апр 2017 в 4:43
@Mr.Husky OnGUI — это не для ui button, а для старого GUI. и у тебя там явно нет кода, который сказал бы, что надо выполнить код «при нажатии на кнопку»
9 апр 2017 в 4:43
покажи скрин привязки кнопки к. к чему ты там и что привязывал)
9 апр 2017 в 4:44
да я вот думаю в этом то и проблема. Делал через onmouseup и down тоже беда)
9 апр 2017 в 4:46
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
В целом сделано почти верно. но box collider 2d на ui кнопке точно не нужен.
В свойстве кнопке OnClick нужно не просто добавить объект на котором висит скрипт-обработчик, а нужно в правой части этого обработчика выбрать тот самый метод, который будет обрабатывать.
При этом важно, чтобы метод находился в том самом скрипте, который обработает событие, а также, чтобы этот метод был публичным
using UnityEngine; public class Button_close: MonoBehaviour < public GameObject layout; public void Close() < layout.gameObject.SetActive(false); >>
Метод OnGUI предназначен для рисования GUI элементов и он тут вообще не нужен
P.S. Т.к. в данном случае управление закрытием выглядит странно: единственный скрипт с названием Button_close с одним методом Close , то в дальнейшем стоит сделать какой-либо объект с управляющим скриптом, например UI_Manager , в котором будут определены методы по управлению UI
Как в редакторе Unity скрыть объект на сцене, но что бы в игру он попал
Есть галка рядом с названием объекта в инспекторе — она скрывает объект в редакторе и в игру он не попадает. Как сделать что бы попадал, включать/выключать постоянно не вариант. Нашел скриншот http://answers.unity3d.com/questions/578323/hide-object-in-editor-only.html, где такое взять? Есть еще в Блендере отдельно глаз скрыть в редакторе, отдельно в рендере.
#1
20:56, 2 июля 2017
По той же ссылке есть простое решение с использованием Layers
#2
21:13, 2 июля 2017
Лучше удалять или скрывать объекты?
Игра в стиле стратегии с видом сверху (Но это неважно). Есть кнопка редактора маршрутов, при включении которой открываются все маршруты — масса стрелочек и команд. Вопрос — все эти объекты при закрытие редактора маршрутов лучше просто скрывать? Или удалять, а при открытии создавать заново? (Все данные хранятся в списках)
Проще просто скрывать, но как лучше для оптимизации?
Добавлено через 2 минуты
Просто видел недавно, что скрытие даже лучше может работать чем удаление, хотя это не логично. Или скрытые объекты (SetActive(false)) нагружают игру не намного больше, чем если их вообще не будет? И создание и удаление наоборот нагружают игру?
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
При нажатии на кнопку показывать\скрывать парные объекты
Подскажите, что я делаю не так (может есть упрощенный вариант), ато писал на сколько хватает.
Наследование vs Композиция vs Агрегация: что лучше выбрать? Как лучше передавать объекты в функции?
Добрый день!! Дело вот в чём, я хочу создать класс, внутри которого будут созданы объекты.
Посоветуйте как лучше скрывать/отображать столбцы в GridPanel
Здравствуйте. Проблема в следующем, имеется небольшое приложение с ext.net компонентами, необходимо.
Как Удалять Объекты, На Которые Ссылается Независимый Регистр Сведений
Добрый день! Проблема типичная (давно сталкивался), но только сейчас я о ней всерьез задумался.
2633 / 1561 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
Если какие-то конкретные объекты в игре должны очень часто то появляться, то исчезать — то лучше манипулировать их активностью (setActive), то-есть лучше скрывать/показывать. Потому что создание и удаление изначально работает медленнее, поэтому для системы легче будет единожды создать объекты и просто переключать их активность.
Как скрыть/показать элемент GUI
Как скрыть или показать элемент GUI — Unity3D
Здравствуйте! У меня такой вопрос, так как я новичок в Unity и в языке C# хочу задать вопрос.
Как создать элемент GUI на основе префаба?
Необходимо динамически создать N элементов интерфейса (в данном случае кнопок). Создаю префаб.
Как скрыть элемент на сайте для ПК, а показать на мобилке?
Хочу сделать один блок так, чтобы он был виден только в мобильной версии, а в версии для ПК — нет.
295 / 244 / 128
Регистрация: 24.12.2014
Сообщений: 708
Сообщение от hebep
Подскажите что я делаю не правильно?
Ссылка на объект не указывает на экземпляр объекта. Вам же редактор детально всё объяснил )) Пробуйте так:
1 2 3
GameObject temp=GameObject.Find ("CanvasMenuRegion") as GameObject; temp.SetActive(true);
Регистрация: 27.07.2016
Сообщений: 11
Я буквально 3 день «общаюсь» с Unity. Нет, не работает temp=null. Понять не могу почему такое происходит. Такое ощющение что он просто не находит его по имени.
1 2 3 4 5 6 7 8
void OnMouseDown () { GameObject temp=GameObject.Find ("CMR") as GameObject; //temp.gameObject.SetActive (false); Debug.Log (temp); }
Добавлено через 10 минут
В коде ошибки нет. Проблема в том что изначально Canvas скрыт и поэтому он его не находит, возвращает null.
Добавлено через 45 минут
Не стал химичить остановился на
foreach(GameObject go in Resources.FindObjectsOfTypeAll(typeof(GameObject))){}
На сцене около 200 гейм объектов, думаю не критично прошерститить их все.
295 / 244 / 128
Регистрация: 24.12.2014
Сообщений: 708
Вот я сделал простой тест:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
void Awake() { var go1 = GameObject.CreatePrimitive( PrimitiveType.Cube ); go1.name = "Cube"; var go2 = GameObject.CreatePrimitive( PrimitiveType.Cube ); go1.name = "Cube"; var temp = GameObject.Find( "Cube" ); //var temp = GameObject.FindGameObjectWithTag( "tag" ); // если есть тег temp.SetActive( false ); print( temp ); var mr = temp.GetComponentMeshRenderer>(); //var mr = temp.GetComponentInChildren(); // для дочерних mr.enabled = false; }
И результат:
Здесь я привёл пример как отключить игровой объект и его компонент.
Сообщение от hebep
Такое ощющение что он просто не находит его по имени.
А нужный объект находится на сцене в момент поиска? Обычно null возвращается, если такого объекта нет. Если у вас «CanvasMenuRegion» — это компонент, то отключать его можно так. як я сделал с «MeshRenderer» в своём примере.
Регистрация: 11.11.2016
Сообщений: 69
Сообщение от wmysterio
Ссылка на объект не указывает на экземпляр объекта. Вам же редактор детально всё объяснил )) Пробуйте так:
1 2 3
GameObject temp=GameObject.Find ("CanvasMenuRegion") as GameObject; temp.SetActive(true);
У меня очень похожая проблема — Canvas1 в false уходит, а Canvas2 в true не выходит с этой же ошибкой.
В void Start Canvas2 уходит в false , в true не вернуть почему-то по кнопке. Причём по void Start этой ошибки нету, только в скрипте кнопки
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
Find не ищет среди выключенных объектов.
Добавлено через 1 минуту
Вообще использовать Find не желательно. Можно публичные поля делать и в них назначать инспектором.
Регистрация: 11.11.2016
Сообщений: 69
Сообщение от Cr0c
Добавлено через 1 минуту
Вообще использовать Find не желательно. Можно публичные поля делать и в них назначать инспектором.
Как? И как мне тогда кнопку настроек реализовать?
295 / 244 / 128
Регистрация: 24.12.2014
Сообщений: 708
Сообщение от ynwest
И как мне тогда кнопку настроек реализовать?
Вам же ответили
Сообщение от Cr0c
Можно публичные поля делать и в них назначать инспектором
Другими словами делайте дополнительный скрипт с открытым полем типа GameObject и переносите туда нужный объект кнопки через инспектор, далее получаете компонент и делайте с ним свои тёмные дела Это Вам даст возможность не искать объекты методом «Find» — Вы уже будете иметь ссылку на указанный объект.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Скрыть и показать элемент
Тут такая проблема : Мы имеем <div Мне нужно , чтобы при нажатии на определенную.
Показать/Скрыть элемент
Подскажите пожалуйста. Есть форма FormRedaktor, на ней кнопки и компонент StringGrid1, надо сделать.
Показать скрыть элемент текста
Как можно показать — скрыть при нажатии значек или элемент текста
Показать/скрыть элемент текста
Доброго времени суток! Подскажите пожалуйста. Имеется такой пример: <!DOCTYPE HTML> <html>.