Перейти к содержимому

Как отменить действие в юнити

  • автор:

Быстрые клавиши.

Эта страница дает обзор горячих клавиш по умолчанию в Юнити. Вы можете также скачать таблицу в формате pdf для Windows и MacOSX. CTRL/CMD означает использование Control на Windows и Command на MacOSX.
Инструменты

Keystroke Command
Q Панорамирование
W Перемещение
E Поворот
R Масштабирование
Z Переключение режима пивота
X Переключение вращения пивота
V Привязка к вершинам
CTRL/CMD+LMB Привязка
CTRL/CMD+SHIFT+N Новый игровой объект
CTRL/CMD+ALT+F Перемещение к обзору ?
CTRL/CMD+SHIFT+F Выравнивание по виду
CTRL/CMD+1 Сцена
CTRL/CMD+2 Игра
CTRL/CMD+3 Инспектор
CTRL/CMD+4 Иерархия
CTRL/CMD+5 Проект
CTRL/CMD+6 Анимации
CTRL/CMD+7 Профайлер
CTRL/CMD+9 Asset store
CTRL/CMD+0 Анимации
CTRL/CMD+SHIFT+C Console
CTRL/CMD+Z Undo
CTRL+Y (Windows только) Redo
CMD+SHIFT+Z (Mac только) Redo
CTRL/CMD+X Вырезать
CTRL/CMD+C Копировать
CTRL/CMD+V Вставить
CTRL/CMD+D Клонировать
SHIFT+Del Удалить
F Центрировать выделение
CTRL/CMD+F Найти
CTRL/CMD+A Выделить все
CTRL/CMD+SHIFT+1 Загрузить выделение 1
CTRL/CMD+SHIFT+2 Загрузить выделение 2
CTRL/CMD+SHIFT+3 Загрузить выделение 3
CTRL/CMD+SHIFT+4 Загрузить выделение 4
CTRL/CMD+SHIFT+5 Загрузить выделение 5
CTRL/CMD+SHIFT+6 Загрузить выделение 6
CTRL/CMD+SHIFT+7 Загрузить выделение 7
CTRL/CMD+SHIFT+8 Загрузить выделение 8
CTRL/CMD+SHIFT+9 Загрузить выделение 9
CTRL/CMD+ALT+1 Сохранить выделение 1
CTRL/CMD+ALT+2 Сохранить выделение 2
CTRL/CMD+ALT+3 Сохранить выделение 3
CTRL/CMD+ALT+4 Сохранить выделение 4
CTRL/CMD+ALT+5 Сохранить выделение 5
CTRL/CMD+ALT+6 Сохранить выделение 6
CTRL/CMD+ALT+7 Сохранить выделение 7
CTRL/CMD+ALT+8 Сохранить выделение 8
CTRL/CMD+ALT+9 Сохранить выделение 9
CTRL/CMD+R Обновить

[Unity] Как отменить только одно действие в редакторе? [Решено]

Если нажать отмену действия, то удаляются все одинаковые объекты. Даже, если я создаю Объект_1, Объект_2, Объект_1 — все равно удалятся все объекты Объект_1. Как это исправить?

#1
22:24, 22 апр 2020

Возможно проблема в этом

Операции отмены автоматически объединяются в зависимости от событий, например, события нажатия кнопки мыши разделяют группы отмены. Появятся сгруппированные операции отмены, которые будут работать как единая отмена. Для управления группировкой вручную используйте Undo.IncrementCurrentGroup .

#2
22:43, 22 апр 2020

foxes
> Undo.IncrementCurrentGroup
Пробовал не помогает(

#3
0:45, 23 апр 2020

smartxp
> Пробовал не помогает(
Что конкретно ты пробовал? Может там нужно было вручную группу создавать на каждый созданный объект.

#4
1:24, 23 апр 2020

foxes
> Что конкретно ты пробовал? Может там нужно было вручную группу создавать на
> каждый созданный объект.
Это тоже не работает:

public void MouseClick( ) < Undo.IncrementCurrentGroup( ); Undo.SetCurrentGroupName( "My group"); //разные имена тоже не помогают int group = Undo.GetCurrentGroup( ); GameObject go = CreateObject( . ); Undo.RegisterCreatedObjectUndo( go, "Create " + go.name); //разные имена тоже не помогают Undo.CollapseUndoOperations( group); >

#5
23:09, 25 апр 2020

Все, разобрался, косяк в коде был в функции CreateObject. Я не знаю, что там автоматом группируется, но код:

public void MouseClick( ) < GameObject go = AssetDatabase.LoadAssetAtPathGameObject>( "MyPrefab.prefab"); Undo.RegisterCreatedObjectUndo( PrefabUtility.InstantiatePrefab( go), "Create Object"); >

в пустом проекте, работал как мне и надо.

#6
23:48, 25 апр 2020

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

Как отменить действие в юнити

Почти все вносимые в изображения изменения могут быть отменены. Вы можете отменить последнее действие, выбрав в меню изображения Правка → Отменить , но эта операция применяется так часто, что стоит запомнить комбинацию клавиш Ctrl + Z .

Сама отмена может быть отменена. После отмены действия вы можете вернуть его выбрав в меню изображения пункт Правка → Повторить , или с использованием клавиши быстрого доступа, Ctrl + Y . Часто это полезно при оценке эффекта какого-либо действия, с помощью его неоднократной отмены и повтора. Обычно это происходит очень быстро, без дополнительного расхода ресурсов или изменения истории отмены, поэтому никакого вреда в этом нет.

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

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

Действие отмены выполняется для каждого конкретного изображения: «история действий» является одним из компонентов изображения. В этих целях GIMP выделяет определённый объём памяти для каждого изображения. Увеличить или уменьшить объём выделяемой памяти можно в «Параметрах» в разделе Системные ресурсы. Здесь присутствуют две важные переменные: минимальное число уровней отмены , которое GIMP будет поддерживать вне зависимости от того, сколько эти уровни будут потреблять памяти, и максимальное количество памяти для отмены , при превышении этого объёма GIMP начнёт удалять самые старые элементы в истории отмены действий.

Хотя история действий является компонентом изображения, она не сохраняется вместе с ним в собственный формат GIMP с расширеним XCF (хотя все остальные свойства изображения сохраняются). Когда изображение будет открыто вновь, история действий будет пуста.

Реализация истории действий в GIMP довольно сложна. Многие операции (такие как изменение видимости слоя) требуют очень мало памяти для возможной отмены, поэтому вы можете выполнить большое их количество до того, как они начнут пропадать из истории действий. Некоторые операции (и снова изменение видимости слоя) являются сжатыми , поэтому выполнение их несколько раз подряд производит лишь одну точку в истории действий. Тем не менее, иные операции потребляют много памяти для возможной отмены. В качестве примера можно привести практически любой фильтр: поскольку фильтры реализованы как расширения, ядро GIMP не может доподлинно узнать, что они изменили. Таким образом, не существует иного способа отменить такое действия кроме как запомнить содержимое затронутого слоя до и после операции. Вы можете выполнить ограниченное количество таких операций прежде, чем они будут удалены из истории действий.

3.1. Неотменяемые операции

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

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

Закрытие изображения

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

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

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

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

Как приостановить выполнение метода в Unity (C#)?

У меня есть метод, который надо приостановить без создания корутин и т.д. Вот пример (не оригинальный метод):

void method() < print("start"); // задержка print("end"); >

Как это сделать? P.S.: не предлагайте делать это через корутины, только без корутин
Отслеживать
Кузин Александр
задан 27 апр 2023 в 18:47
Кузин Александр Кузин Александр
59 6 6 бронзовых знаков
Задержка по времени или до какого-то события, или что? Чем корутины не угодили?
27 апр 2023 в 19:37
@aepot, корутины запускаются в отдельном потоке, если бы можно было их в основном запустить.
27 апр 2023 в 19:53
корутины работают в том же потоке, что и скрипт, не понял проблемы
27 апр 2023 в 19:58
Я это имел ввиду: kuzinprojects.ru/Question.cs (пишу через ссылку, в комментариях код не пишется)
28 апр 2023 в 13:21
Перенесите ваш end внутрь корутины или сделайте сам Start() корутиной так, как показано в ответе.
28 апр 2023 в 15:11

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

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

Конкретно ваш метод будет выглядеть так:

IEnumerator method() < print("start"); // Подождать одну секунду yield return new WaitForSeconds(1); print("end"); >

А запускаем его так:

StartCoroutine(method()); 

Отслеживать
ответ дан 28 апр 2023 в 6:58
2,745 1 1 золотой знак 16 16 серебряных знаков 32 32 бронзовых знака
Я это имел ввиду: kuzinprojects.ru/Question.cs
28 апр 2023 в 13:18

@КузинАлександр да, я понял, но корутины выполняются в том же потоке. Просто они выполняются до первой yield, а потом в каждом следующем Update() решается, можно ли продолжить выполнение (например, прошло ли N секунд), и потом корутина продолжается (в том же потоке, просто отложенное выполнение. Выполнение откладывается ровно настолько, насколько вы хотите, но при этом поток не тормозится).

[Unity] Как отменить только одно действие в редакторе? [Решено]

Если нажать отмену действия, то удаляются все одинаковые объекты. Даже, если я создаю Объект_1, Объект_2, Объект_1 — все равно удалятся все объекты Объект_1. Как это исправить?

#1
22:24, 22 апр 2020

Возможно проблема в этом

Операции отмены автоматически объединяются в зависимости от событий, например, события нажатия кнопки мыши разделяют группы отмены. Появятся сгруппированные операции отмены, которые будут работать как единая отмена. Для управления группировкой вручную используйте Undo.IncrementCurrentGroup .

#2
22:43, 22 апр 2020

foxes
> Undo.IncrementCurrentGroup
Пробовал не помогает(

#3
0:45, 23 апр 2020

smartxp
> Пробовал не помогает(
Что конкретно ты пробовал? Может там нужно было вручную группу создавать на каждый созданный объект.

#4
1:24, 23 апр 2020

foxes
> Что конкретно ты пробовал? Может там нужно было вручную группу создавать на
> каждый созданный объект.
Это тоже не работает:

public void MouseClick( ) < Undo.IncrementCurrentGroup( ); Undo.SetCurrentGroupName( "My group"); //разные имена тоже не помогают int group = Undo.GetCurrentGroup( ); GameObject go = CreateObject( . ); Undo.RegisterCreatedObjectUndo( go, "Create " + go.name); //разные имена тоже не помогают Undo.CollapseUndoOperations( group); >

#5
23:09, 25 апр 2020

Все, разобрался, косяк в коде был в функции CreateObject. Я не знаю, что там автоматом группируется, но код:

public void MouseClick( ) < GameObject go = AssetDatabase.LoadAssetAtPathGameObject>( "MyPrefab.prefab"); Undo.RegisterCreatedObjectUndo( PrefabUtility.InstantiatePrefab( go), "Create Object"); >

в пустом проекте, работал как мне и надо.

#6
23:48, 25 апр 2020

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

Сочетания клавиш Unity

Это обзор горячих клавиш Unity, установленных по умолчанию. Вы также можете скачать таблицу в формате PDF для Windows и MacOSX. Если сочетание клавиш содержит CTRL/CMD, это означает, что нужно использовать клавишу Control на Windows или клавишу Command на MacOSX.

Tools
“Горячая” клавиша Действие
Q Pan (перемещение камеры сцены)
W Move (перемещение)
E Rotate (вращение)
R Scale (масштабирование)
T Rect Tool
Z Pivot Mode toggle (переключение Pivot-режима)
X Pivot Rotation Toggle (переключение поворота пивота)
V Vertex Snap (привязка вершин)
CTRL/CMD+ЛКМ Snap (привязка)
GameObject
CTRL/CMD+SHIFT+N Создать новый игровой объект
ALT+SHIFT+N New empty child to selected game object
CTRL/CMD+ALT+F Переместить объект к точке вида
CTRL/CMD+SHIFT+F Выровнить по виду
SHIFT+F или двойное F Привязывает камеру окна Scene View к выбранному игровому объекту
Window (окно)
CTRL/CMD+1 Scene (сцена)
CTRL/CMD+2 Game (игра)
CTRL/CMD+3 Inspector (инспектор)
CTRL/CMD+4 Hierarchy (иерархия)
CTRL/CMD+5 Project (проект)
CTRL/CMD+6 Animation (анимация)
CTRL/CMD+7 Profiler (профайлер)
CTRL/CMD+9 Магазин ассетов
CTRL/CMD+0 Version Control
CTRL/CMD+SHIFT+C Console (консоль)
Edit
CTRL/CMD+Z Отменить
CTRL+Y (только на Windows) Повторить
CMD+SHIFT+Z (только на Mac) Повторить
CTRL/CMD+X Вырезать
CTRL/CMD+C Копировать
CTRL/CMD+V Вставить
CTRL/CMD+D Дублировать
SHIFT+Del Удалить
F Центрировать камеру сцены на объекте
CTRL/CMD+F Найти
CTRL/CMD+A Выбрать все
CTRL/CMD+P Играть
CTRL/CMD+SHIFT+P Пауза
CTRL/CMD+ALT+P Шаг
Selection (выделение)
CTRL/CMD+SHIFT+1 Загрузить выделение 1
CTRL/CMD+SHIFT+2 Загрузить выделение 2
CTRL/CMD+SHIFT+3 Загрузить выделение 3
CTRL/CMD+SHIFT+4 Загрузить выделение 4
CTRL/CMD+SHIFT+5 Загрузить выделение 5
CTRL/CMD+SHIFT+6 Загрузить выделение 6
CTRL/CMD+SHIFT+7 Загрузить выделение 7
CTRL/CMD+SHIFT+8 Загрузить выделение 8
CTRL/CMD+SHIFT+9 Загрузить выделение 9
CTRL/CMD+ALT+1 Сохранить выделение 1
CTRL/CMD+ALT+2 Сохранить выделение 2
CTRL/CMD+ALT+3 Сохранить выделение 3
CTRL/CMD+ALT+4 Сохранить выделение 4
CTRL/CMD+ALT+5 Сохранить выделение 5
CTRL/CMD+ALT+6 Сохранить выделение 6
CTRL/CMD+ALT+7 Сохранить выделение 7
CTRL/CMD+ALT+8 Сохранить выделение 8
CTRL/CMD+ALT+9 Сохранить выделение 9
Assets (ассеты)
CTRL/CMD+R Обновить

Customizing Your Workspace (Настройка рабочего пространства)

Как приостановить выполнение метода в Unity (C#)?

У меня есть метод, который надо приостановить без создания корутин и т.д. Вот пример (не оригинальный метод):

void method() < print("start"); // задержка print("end"); >

Как это сделать? P.S.: не предлагайте делать это через корутины, только без корутин
Отслеживать
Кузин Александр
задан 27 апр 2023 в 18:47
Кузин Александр Кузин Александр
59 6 6 бронзовых знаков
Задержка по времени или до какого-то события, или что? Чем корутины не угодили?
27 апр 2023 в 19:37
@aepot, корутины запускаются в отдельном потоке, если бы можно было их в основном запустить.
27 апр 2023 в 19:53
корутины работают в том же потоке, что и скрипт, не понял проблемы
27 апр 2023 в 19:58
Я это имел ввиду: kuzinprojects.ru/Question.cs (пишу через ссылку, в комментариях код не пишется)
28 апр 2023 в 13:21
Перенесите ваш end внутрь корутины или сделайте сам Start() корутиной так, как показано в ответе.
28 апр 2023 в 15:11

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

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

Конкретно ваш метод будет выглядеть так:

IEnumerator method() < print("start"); // Подождать одну секунду yield return new WaitForSeconds(1); print("end"); >

А запускаем его так:

StartCoroutine(method()); 

Отслеживать
ответ дан 28 апр 2023 в 6:58
2,745 1 1 золотой знак 16 16 серебряных знаков 32 32 бронзовых знака
Я это имел ввиду: kuzinprojects.ru/Question.cs
28 апр 2023 в 13:18

@КузинАлександр да, я понял, но корутины выполняются в том же потоке. Просто они выполняются до первой yield, а потом в каждом следующем Update() решается, можно ли продолжить выполнение (например, прошло ли N секунд), и потом корутина продолжается (в том же потоке, просто отложенное выполнение. Выполнение откладывается ровно настолько, насколько вы хотите, но при этом поток не тормозится).

Как выполнить код после окончания анимации?

Например персонаж начинает атаковать. Во время анимации булевая переменная attack = true, анимация длиться около секунды и после ее окончания булевая переменная attack должна стать false. Как такое реализовать не прибегая к помощи корутин?

Отслеживать

задан 20 ноя 2021 в 13:51

53 1 1 серебряный знак 9 9 бронзовых знаков

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

  1. Открой скрипт, на котором висит аниматор и напиши метод, который обращается к attack и переключает его в false;
 private Animator _animator; private void Awake() < _animator = GetComponent(); > public void AttackToogle()
  1. Открой анимацию с атакой, выдели кадр, заканчивающий атаку(когда нужно переключить в false) и нажми Add event. Над кадром появится флажок:
  2. Не закрывая окна с анимацией кликни на объект с Animator, и в окне с анимацией кликни на этот флажок. В инспекторе отобразится раздел Animation Event с одним поле: Function. Там и выбираем ранее написанный метод, который переключает в False бул attack:
  3. Всё, кайфуем. Или начинаем думать, как подстроить этот способ под свой проект, если там много разных юнитов, использующих эту же анимацию, копая интернет в сторону Animation event.

P.S. Предполагаю, что attack = true прописано в методе, вызываемом атаку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *