Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Использование средства обновления API

Иногда при разработке программного обеспечения Unity мы принимаем решение изменить и улучшить способ работы классов, функций и свойств (API). Мы делаем это, чтобы оказать минимальное влияние на существующий игровой код пользователя, но иногда, чтобы улучшить ситуацию, нам приходится что-то ломать.

Мы склонны вносить эти существенные «критические изменения» только при переходе от одной значимой версии Unity к другой и только в тех случаях, когда это упрощает использование Unity (то есть пользователи будут совершать меньше ошибок) или дает ощутимый прирост производительности. и только после тщательного альтернативного рассмотрения. Однако результатом этого является то, что если вы, например, откроете проект Unity 4 в Unity 5, вы можете обнаружить, что некоторые команды сценариев, которые вы использовали, теперь были изменены, удалены или работают немного по-другому.

Очевидным примером этого является то, что в Unity 5 мы удалили «быстрые методы доступа», которые позволяли вам ссылаться на распространенные типы компонентов в классе GameObjectОсновной объект в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. непосредственно в Словарь
, например gameObject .light, gameObject.camera, gameObject.audioSource и т. д.

В Unity 5 теперь нужно использовать команду GetComponent для всех типов, кроме преобразования. Поэтому, если вы откроете проект Unity 4, который использует gameObject.light в Unity 5, вы обнаружите, что конкретная строка кода устарела и должна быть обновлено.

Автоматическое обновление

В Unity есть программа обновления API, которая обнаруживает использование устаревшего кода в ваших скриптахЧасть кода, который позволяет вам создавать свои собственные Компоненты, запускать игровые события, изменять свойства Компонентов с течением времени и реагировать на ввод данных пользователем любым удобным для вас способом. Подробнее
Смотрите в Словарь
и можете предложить их автоматическое обновление. Если вы согласитесь, он перепишет ваш код, используя обновленную версию API.

Диалоговое окно обновления API
Диалоговое окно обновления API

Очевидно, что, как всегда, важно иметь резервную копию вашей работы на случай, если что-то пойдет не так, особенно когда вы позволяете программному обеспечению переписывать ваш код! Как только вы убедитесь, что у вас есть резервная копия, и нажмете кнопку «Вперед», Unity перезапишет все экземпляры устаревшего кода рекомендуемой обновленной версией.

Например, у вас был скрипт, который делал следующее:

light.color = Color.red;

Обновление API Unity преобразует это для вас в:

GetComponent().color = Color.red;

Общий рабочий процесс программы обновления выглядит следующим образом:

  1. Открыть проект/импортировать пакет, содержащий скрипты/сборки с устаревшим использованием API

  2. Unity запускает компиляцию скрипта

  3. Средство обновления API проверяет наличие определенных ошибок компилятора, которые, как ему известно, являются "обновляемыми"

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

  5. Если пользователь принимает обновление, запустите средство обновления API (которое обновит все скрипты, написанные на том же языке, который был скомпилирован на шаге 2)

  6. Переходите к шагу 2 (чтобы принять во внимание обновленный код), пока на шаге 5 не будут обновлены скрипты.

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

После успешного завершения работы средства обновления API в консоли отображается следующее уведомление:

Уведомление об успехе
Уведомление об успехе

Если вы выберете не, чтобы разрешить программе обновления API обновлять ваши скрипты, вы увидите ошибки скриптов в своей консоли, как обычно. Вы также заметите, что ошибки, которые средство обновления API может обновлять автоматически, помечены как (UnityUpgradable) в сообщении об ошибке.

Ошибки в консоли при отмене апдейтера API
Ошибки в консоли при отмене апдейтера API

Если в вашем скрипте есть другие ошибки, помимо использования устаревшего API, программа обновления API не сможет полностью завершить свою работу, пока вы не исправите другие ошибки. В этом случае вы будете уведомлены в окне консолиокне редактора Unity, в котором отображаются ошибки, предупреждения и другие сообщения, созданные Unity или ваши собственные скрипты. Подробнее
См. в Словарь
с таким сообщением:

Другие ошибки в ваших сценариях могут помешать корректной работе средства обновления API.
Другие ошибки в ваших сценариях могут помешать корректной работе средства обновления API.

«Некоторые скрипты имеют ошибки компиляции, которые могут помешать обновлению устаревших API. Обновление устаревшего API продолжится автоматически после исправления этих ошибок».

После того как вы исправите другие ошибки в своем скрипте, вы можете снова запустить средство обновления API. Средство обновления API запускается автоматически при запуске компиляции скрипта, но вы также можете запустить его вручную из меню «Активы» здесь:

Программу обновления API можно запустить вручную из меню «Активы».
Программу обновления API можно запустить вручную из меню «Активы».

Режим командной строки

При запуске Unity в пакетном режиме из командной строки используйте параметр -accept-apiupdate, чтобы разрешить запуск средства обновления API. Дополнительные сведения см. в разделе Аргументы командной строки.

Ведение журнала

управление версиямиСистема управления изменениями файлов. Вы можете использовать Unity в сочетании с наиболее распространенными инструментами контроля версий, включая Perforce, Git, Mercurial и PlasticSCM. Подробнее
Система See in Словарь
позволяет увидеть, какие изменения APIUpdater применяет к сценариям проекта. . Однако это может быть сложно при работе с предварительно скомпилированными сборками. Чтобы просмотреть список изменений, сделанных AssemblyUpdater (компонент APIUpdater, отвечающий за обновление сборок), задайте для переменной среды UNITY_ASSEMBLYUPDATE_LOGTHRESHOLD желаемое пороговое значение журнала и запустите Unity. Например, в Windows вы можете ввести:

c:> set UNITY_ASSEMBLYUPDATE_LOGTHRESHOLD=Debug c:> \path\to\unity\Unity.exe

После завершения AssemblyUpdater вы можете увидеть примененные обновления в Editor.log:

[AssemblyUpdater] Property access to 'UnityEngine.Rigidbody UnityEngine.GameObject::get_rigidbody()' in 'System.Void Test.ClassReferencingObsoleteUnityAPIThroughEditorAssembly::Run()' replaced with 'T UnityEngine.GameObject::GetComponent<UnityEngine.Rigidbody>()'.

Действительные значения для переменной среды UNITY_ASSEMBLYUPDATE_LOGTHRESHOLD в порядке возрастания детализации:

  • Error: AssemblyUpdater регистрирует только сообщения Error. Сообщения об ошибках заносятся в журнал, когда AssemblyUpdater не может применить конкретное обновление, что требует от вас принятия корректирующих действий (обычно запрашивается у исходного автора сборки предоставление обновленной версии сборки).

  • Warning. AssemblyUpdater регистрирует только сообщения Warning и Error. Предупреждающие сообщения обычно указывают на то, что AssemblyUpdater достиг состояния, в котором может возникнуть потенциальная проблема. Эти проблемы могут зависеть от условий, неизвестных программе AssemblyUpdater на момент регистрации сообщения.

  • Info. AssemblyUpdater регистрирует только Info, Warning и Error. Информационные сообщения содержат обновления, примененные AssemblyUpdater.

  • Debug. AssemblyUpdater регистрирует все сообщения. Отладка помощь в устранении неполадок. Вы можете установить порог на этот уровень, если у вас возникли проблемы с AssemblyUpdater и вы хотите сообщить о них в Unity.

Error — это значение по умолчанию, если UNITY_ASSEMBLYUPDATE_LOGTHRESHOLD не установлен.

Устранение неполадок

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

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

Проверив предыдущие строки в консоли в соответствии с инструкциями, вы сможете увидеть проблемы, возникшие в процессе обновления.

В этом примере произошел сбой средства обновления API, так как у него не было разрешения на запись в файл сценария.
В этом примере произошел сбой средства обновления API, так как у него не было разрешения на запись в файл сценария.

Ограничения

Программа обновления API не может автоматически исправлять каждое изменение API. Как правило, обновляемый API помечен как (UnityUpgradable) в сообщении об устаревшем. Например:

[Obsolete("Foo property has been deprecated. Please use Bar (UnityUpgradable)")]

Программа обновления API обрабатывает только API, помеченные как (UnityUpgradable).

Программа обновления API может не запуститься, если единственный обновляемый API в ваших сценариях включает в себя общие свойства компонента или GameObject, а эти сценарии имеют доступ только к членам этих свойств. Примерами общих свойств являются renderer и rigidbody, а примерами членов этих свойств являются rigidbody. mass и renderer.bounds. Чтобы обойти это, добавьте фиктивный метод в любой из ваших сценариев, чтобы активировать средство обновления API. Например:

private object Dummy(GameObject o) { return o.rigidbody;}.
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3