Unity События (UnityEvents)
UnityEvents это способ позволяющий поддерживать управляемую пользователем функцию обратного вызова от момента редактирования до момента запуска без необходимости дополнительного программирования и конфигурации скриптов.
UnityEvents полезны для целого ряда вещей:
- Содержит управляемую пользователем функцию обратного вызова
- Системы связей
- Постоянная функция обратного вызова
- Предварительно настроенные события вызова
UnityEvents могут быть добавлены к любому MonoBehavior и вызываться в коде как стандартные .net делегаты. После добавления UnityEvent в MonoBehaviour, оно отобразится в инспекторе и можно будет добавлять постоянные функции обратного вызова.
UnityEvent s have similar limitations to standard delegates. That is, they hold references to the element that is the target and this stops the target being garbage collected. If you have a UnityEngine.Object as the target and the native representation disappears the callback will not be invoked.
Вот несколько шагов по настройке обратного вызова в редакторе:
- Make sure your script imports/uses UnityEngine.Events .
- Выберите иконку +, чтобы добавить слот для функции обратного вызова
- Выберите объект UnityEngine.Object к которому вы хотите обратиться посредством функции обратного вызова (Для этого вы можете использовать селектор объектов)
- Выберите функцию, которую вы хотите вызвать
- Вы можете добавить больше одной функции обратного вызова к событию
Во время настройки UnityEvent в инспекторе, вам доступно два типа поддерживаемых функций вызова:
Статические вызовы, это — пред настроенные вызовы с предустановленными значениями, которые настраиваются в UI(пользовательском интерфейсе). Это означает, что при срабатывании функции обратного вызова, целевая функция вызывается с аргументами предварительно введенными в UI. Динамические вызовы при срабатывании используют аргументы получаемые из кода, и ограничены типом вызванного UnityEvent. UI фильтрует функции обратного вызова и показывает только те динамические вызовы, которые действительны для данного UnityEvent.
По умолчанию UnityEvent в Monobehaviour связывает динамически функции без аргументов. Это не обязательно должно быть так, потому что UnityEvents поддерживает связь функций содержащих до 4-х аргументов. Чтобы сделать это, вам необходимо переопределить стандартный класс UnityEvents как поддерживающий множественные аргументы. Сделать это довольно просто:
[Serializable] public class StringEvent : UnityEvent <>
Потом это может быть вызвано с помощью вызова функции Invoke со ‘строкой(string)’ в качестве аргумента.
UnityEvents могут быть переопределены с наличием до 4-х аргументов в их общем определении.
Добавление экземпляра этого класса к вашему, вместо базового UnityEvent, даст возможность функции обратного вызова связывать динамические строковые функции.
hold
hold on сохраняет графики в текущей системе координат так, чтобы новые графики, добавленные к осям, не удаляли существующие графики. Новые графики используют следующие цвета и стили линии на основе ColorOrder и LineStyleOrder свойства осей. MATLAB ® настраивает пределы осей, отметки деления и метки в виде галочки, чтобы отобразить полный спектр данных. Если оси не существуют, то hold команда создает их.
hold off устанавливает состояние удержания на прочь так, чтобы новые графики, добавленные к осям, очистили существующие графики и сбросили все свойства осей. Следующий график, добавленный к осям, использует первый цветной и стиль линии на основе ColorOrder и LineStyleOrder свойства осей. Эта опция является поведением по умолчанию.
hold all совпадает с hold on . Этот синтаксис будет удален в будущем релизе. Используйте hold on вместо этого.
hold переключается состояние удержания между на и прочь.
hold( ax , ___ ) устанавливает состояние удержания для осей, заданных ax вместо текущей системы координат. Задайте ax перед всеми другими аргументами в любом из предыдущих синтаксисов. Используйте одинарные кавычки вокруг ‘on’ и ‘off’ входные параметры, такие как hold(ax,’on’) .
Примеры
Добавление линейного графика к существующим осям
Постройте график. Используйте hold on добавить второй линейный график, не удаляя существующий линейный график. Новый график использует следующий цветной и стиль линии на основе ColorOrder и LineStyleOrder свойства осей. После отключите удержание командой hold off.
x = linspace(-pi,pi); y1 = sin(x); plot(x,y1) hold on y2 = cos(x); plot(x,y2) hold off

Когда состояние удержания выключено, новые графики удаляют существующие графики. Новые графики запускаются с начала порядка стиля линии и последовательности цветов.
y3 = sin(2*x); plot(x,y3)

Определение состояния удержания для определенных осей
Начиная в R2019b, можно отобразить плиточное размещение графиков с помощью tiledlayout и nexttile функции. Вызовите tiledlayout функция, чтобы создать 2 1 мозаичное размещение графика. Вызовите nexttile функция, чтобы создать объекты осей ax1 и ax2 . Постройте график синусоиды в каждом, исключает.
x = linspace(0,10); y1 = sin(x); y2 = cos(x); tiledlayout(2,1) % Top plot ax1 = nexttile; plot(ax1,x,y1) % Bottom plot ax2 = nexttile; plot(ax2,x,y2)

Добавьте вторую синусоиду в главные оси.
hold(ax1,'on') y3 = sin(2*x); plot(ax1,x,y3) hold(ax1,'off')

Установите состояние удержания для нескольких осей
Создайте 1 2 мозаичное размещение графика. Вызовите nexttile функция, чтобы создать два объекта осей и график в оси.
t = tiledlayout(1,2); ax1 = nexttile; ax2 = nexttile; plot(ax1,[0 1 0 1]) scatter(ax2,rand(1,10),rand(1,10),'filled')

Установите hold состояние для обеих из осей к ‘on’ . Затем отобразите дополнительные данные в каждом графике.
hold([ax1 ax2],'on') plot(ax1,[.5 .2 .5 .2]) scatter(ax2,rand(1,10),rand(1,10),'filled')

Входные параметры
ax — Целевые оси
оси | массив осей
Целевые оси в виде одного из следующего:
- Любой тип объекта осей: Axes polaraxes , или GeographicAxes объект.
- Массив объектов осей, которые принадлежат тому же классу. Чтобы определить класс, используйте class функция.
Если вы не задаете оси, то hold устанавливает состояние удержания для текущей системы координат.
Советы
- Используйте ishold функционируйте, чтобы протестировать состояние удержания.
Алгоритмы
hold функция устанавливает эти свойства:
- NextPlot свойство осей — Наборы это свойство связанного Axes polaraxes , или GeographicAxes возразите против любого ‘add’ или ‘replace’ .
- NextPlot изобразите свойство — Наборы это свойство Figure возразите против ‘add’ .
Смотрите также
Функции
- ishold | figure | tiledlayout | nexttile | axes | cla | newplot
Свойства
Темы
Представлено до R2006a
Открытый пример
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
Документация MATLAB
Поддержка
- MATLAB Answers
- Помощь в установке
- Отчеты об ошибках
- Требования к продукту
- Загрузка программного обеспечения
© 1994-2021 The MathWorks, Inc.
- Условия использования
- Патенты
- Торговые марки
- Список благодарностей
Для просмотра документации необходимо авторизоваться на сайте
Войти
Памятка переводчика
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.
Unity иногда появляется hold on

Иногда при работе в Unity появляется вот такое окно (Не обязательно AddComponentWindow.MouseUp, но всегда с таким заголовком) и тогда Unity полностью зависает и я не могу даже сохранить проект(, и приходится перезапускать. Я искал такую проблему в интернете, но решения так и не нашёл (AutoRefresh — off, не помогает).
Отслеживать
задан 13 мая 2021 в 19:52
Тимон Яблоков Тимон Яблоков
421 3 3 серебряных знака 20 20 бронзовых знаков
А если подождать 2-3 минуты?
14 мая 2021 в 4:11
Твой ПК не обрабатывает эти операции за макросекунду и вот когда ты видишь это окно, значит твой процессор пытается выполнить эту задачу
14 мая 2021 в 6:30
«Холд он» = «Подожди некоторое время, я работаю». Это не проблема — это нормальная работа юнити. Хочешь минимизировать время показа такого окна — обнови компьютер.
17 мая 2021 в 12:58
Я голосую за закрытие этого вопроса, потому что это as Designed behavior
Бесконечный Hold on?
Бесконечный hold on при попытке открыть скрипт, (только что созданный) что делать?
Unity 2021.3.4f1 Personal. visual studio 2019[16.3.29409].
Пробовал по умолчанию открывать через другие версии visual studio, но не работает. Если открыть файл в проводнике, а не в юнити, то все работает как надо. На резерве все работает и на новых проектах также. Кода нет, т.к. я только создаю скрипт в этом проекте и грузит бесконечно юнити, но по логике там обычные start update пустые висят, так и не понял в чем дело, работаю на резерве, но было бы интересно узнать решение проблемы
- Вопрос задан более года назад
- 268 просмотров
7 комментариев
Простой 7 комментариев
yraiv @yraiv Автор вопроса
GavriKos , Артём Штенников, ну правда, в чем дело может быть? Всегда все ок было, а конкретно на этом проекте невозможно создать никакой скрипт, вернее создать могу, но как только хочу его открыть из юнити, то всё. намертво виснет. В чем может дело быть? Это не комп слабый, а на стороне юнити проблемы

GavriKos @GavriKos Куратор тега Unity
yraiv, проблема в том что вы не предоставили никаких данных конкретных
yraiv @yraiv Автор вопроса
GavriKos, дык не знаю какие надо. Могу описать то, что я делал.
Открыл проект, в котором работал, захотел сделать новый скрипт, сделал его и при попытке открыть из юнити — бесконечная загрузка ( не виснет, а именно загружается). На форумах нашёл пару подобных проблем и решений, ничего не подошло.В других проектах никаких проблем и даже в резерве этого проекта всё работает ок. Но почему такое может происходить загадка для меня.

Модератор @TosterModerator
yraiv, вот и надо подробности расписать — версии ПО такие-то, настройки такие-то, код такой-то, в логи падает такая-то инфа, я пробовал вот так — тогда вот что выходит; пробовал эдак — вон чо.
А сейчас на вопрос «я че-то нажал и всё сломалось» ответ «не нажимайте че-то больше. Жмите какие-либо другие кнопки, пока не исправится».
Если вопрос не будет дополнен и конкретизирован — под удаление.
yraiv @yraiv Автор вопроса
Модератор, Unity 2021.3.4f1 Personal. visual studio 2019[16.3.29409]. Пробовал по умолчанию открывать через другие версии visual studio, но не работает. Если открыть файл в проводнике, а не в юнити, то все работает как надо. На резерве все работает и на новых проектах также. Кода нет, т.к. я только создаю скрипт в этом проекте и грузит бесконечно юнити, но по логике там обычные start update пустые висят, так и не понял в чем дело, работаю на резерве, но было бы интересно узнать решение проблемы