#unity3d #user-interface #editor
Вопрос:
Контекст : Я редактирую сборный проект, у меня есть два компонента, оба являются пользовательскими сценариями.
При редактировании сборного модуля я хочу удалить синхронизацию контейнера компонентов одновременно с удалением дескриптора контейнера компонентов в редакторе, щелкнув его правой кнопкой мыши и нажав «Удалить компонент». Смотрите картинку ниже.
В ContainerDescriptor у меня есть ссылка на сценарий ContainerSync.
public class ContainerDescriptor : MonoBehaviour
{
public ContainerSync containerSync;
}
Я попытался использовать метод onDestroy() скрипта ContainerDescriptor, но он не вызывается при удалении ContainerDescriptor таким образом.
Ответ №1:
В этой теме есть решение, по крайней мере, для того, чтобы удалить этот компонент через контекстное меню, как вы это делаете.
Используя [ExecuteAlways]
сообщения о событиях, вызовы, которые обычно вызываются только в режиме воспроизведения, также вызываются в режиме редактирования и в сборном режиме!
Вы можете сделать что-то вроде, например
[ExecuteAlways]
public class ContainerDescriptor : MonoBehaviour
{
public ContainerSync containerSync;
#if UNITY_EDITOR
private void OnDestroy ()
{
if(containerSync)
{
if(Application.isPlaying)
Destroy(containerSync);
else
DestroyImmediate (containerSync);
}
}
#endif
}
Обратите внимание, однако, что специально для сборных модулей это все равно может не сработать, так как afaik не Destroy
может использоваться и не DestroyImmediate
может использоваться внутри сборных модулей (см. Здесь).
Комментарии:
1. Похоже, это работает и для сборных домов, по крайней мере, DestroyImmediate.