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

При обновлении проектов с Unity 5.3 до Unity 5.4 вы должны знать о некоторых изменениях, которые могут повлиять на ваш существующий проект.

Сеть: изменения в API службы многопользовательской игры

Многочисленные изменения в Networking API.

Сеть: WebRequest больше не является экспериментальной

Интерфейс WebRequest был переведен с UnityEngine.Experimental.Networking на UnityEngine.Networking. Необходимо обновить проекты Unity 5.2 и 5.3, использующие UnityWebRequest.

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

Эффект изображения с атрибутом ImageEffectTransformsToLDR больше не будет применяться непосредственно к SceneСцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
Посмотреть в представлении Словарь
, если он найден. Существует новый атрибут для применения эффектов к виду сценыинтерактивному представлению мира, который вы создаете. Вы используете Scene View для выбора и размещения пейзажей, персонажей, камер, источников света и всех других типов игровых объектов. Подробнее
См. в Словарь
: ImageEffectAllowedInSceneView. Стандартные активы 5.4 были обновлены, чтобы отразить это изменение.

Шейдеры: переименованные переменные

Ряд встроенных шейдеровПрограмма, работающая на графическом процессоре. Подробнее
См. в Словарь
переменные были переименованы для согласованности:

  • _Object2World и _World2Object теперь называются unity_ObjectToWorld и unity_WorldToObject.
  • _World2Shadow теперь называется unity_WorldToShadow[0], _World2Shadow1 — unity_WorldToShadow[1] и т. д.
  • _LightMatrix0 теперь unity_WorldToLight
  • _WorldToCamera, _CameraToWorld, _Projector, _ProjectorDistance, _ProjectorClip и _GUIClipTextureMatrix теперь имеют префикс unity

Ссылки на переменные будут автоматически переименованы в файлах .shader и .cginc при их импорте. Однако после импорта шейдеры нельзя будет использовать в Unity 5.3 или более ранних версиях без ручного переименования переменных.

Шейдеры: массивы юниформ

В Unity 5.4 изменился способ обработки массивов свойств шейдера. Теперь есть «родная» поддержка массивов с плавающей точкой/вектором/матрицей в шейдерах (через MaterialPropertyBlock.SetFloatArray, Shader.SetGlobalFloatArray и т. д. .). Эти новые API позволяют использовать массивы до 1023 элементов.

Старый способ использования имен с цифровыми суффиксами для ссылок на отдельные элементы массива устарел (например, _Colors0, _Colors1). как в Material, так и в MaterialPropertyBlock. Свойства такого типа, сериализованные с помощью Material, больше не могут задавать элементы массива (но если имя какого-либо юниформ-массива дополнено числом, оно все еще работает).

Шейдеры: прочие изменения в версии 5.4

Цель компиляции шейдера по умолчанию изменена на «#pragma target 2.5» (SM3.0 на DX9, уровень функций DX11 9.3 на WinPhone). Вы по-прежнему можете ориентироваться на уровень функций DX9 SM2.0 и DX11 9.1 с помощью «#pragma target 2.0».

Большинство встроенных шейдеров сейчас ориентированы на версию 2.5. Заметными исключениями являются шейдеры Unlit, VertexLit и шейдеры с фиксированными функциями. На практике это означает, что большинство встроенных и вновь созданных шейдеров по умолчанию не будут работать на графических процессорах ПК, выпущенных до 2004 года. См. этот пост в блоге для получения подробной информации.

Конструктор класса Material Material(string), который уже устарел, перестает работать в версии 5.4. При его использовании будет напечатана ошибка, а шейдер ошибок будет окрашен в пурпурный цвет.

Внутренний шейдер, используемый для вычисления направленных световых теней в пространстве экрана, перемещен в настройки Graphics. Если вы использовали настроенную версию теней направленного света, имея копию этого шейдера в своем проекте, он больше не будет использоваться. Вместо этого выберите собственный шейдер в разделе Edit > Project Settings, а затем выберите категорию Graphics.

Зонды отражения совместно используют сэмплер между двумя текстурами. Если вы сэмплируете их вручную в шейдере и получаете ошибку «необъявленный идентификатор samplerunity_SpecCube1», вам необходимо изменить код с UNITY_PASS_TEXCUBE(unity_SpecCube1) на UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1,unity_SpecCube0).

UnityEditor.ShaderUtil.ShaderPropertyTexDim устарел; используйте Texture.dimension.

Вычислительные буферы

Разметка данных ComputeBuffers в автоматически преобразованных шейдерах OpenGL была изменена, чтобы соответствовать разметке DirectX ComputeBuffers. Если вы используете ComputeBuffers в OpenGL, удалите весь код, который настраивает данные, чтобы они соответствовали предыдущим правилам макета, специфичным для OpenGL. Дополнительные сведения см. в разделе Вычислительные шейдеры.

Playables: переход на версию 5.4

  • Игровые объектыAPI, который позволяет создавать инструменты, эффекты или другие игровые механизмы путем организации и оценки данных. источники в древовидной структуре, известной как PlayableGraph. Подробнее
    См. Словарь
    теперь являются структурами, а не классами.
  • Структуры Playable являются дескрипторами собственных классов Playable, а не указателями на собственные Игровые классы.
  • Ненулевая структура Playable не гарантирует, что Playable можно использовать. Используйте метод .IsValid, чтобы убедиться, что ваш Playable можно использовать.
  • Любой метод, который раньше возвращал null для пустых входных/выходных данных, теперь будет возвращать Playable.Null.
  • Playable.Null является недопустимым Playable.
  • Playable.Null можно передать в AddInput, SetInput и SetInputs, чтобы зарезервировать пустые входы или неявно отключить подключенные входы.
  • Использование Playable.Null или любого недопустимого Playable в качестве входных данных для любого метода или вызов метода для недопустимого Playable вызовет соответствующие исключения для операции.
  • Сравнение Playables с null теперь бессмысленно. Сравните с Playable.Null.
  • Игровые объекты должны быть выделены с помощью статического метода Create класса, который вы хотите использовать.
  • Объекты Playable должны быть освобождены с помощью метода .Destroy в дескрипторе Playable.
  • Игровые объекты, которые не были освобождены, будут утекать.
  • Playables были преобразованы в структуры для повышения производительности за счет отказа от упаковки/распаковки (подробнее о боксе).
  • Приведение Playable к объекту, явное или неявное, вызовет упаковку/распаковку, что снижает производительность.
  • Наследование от класса Playable приведет к упаковке/распаковке экземпляров дочернего класса.
  • Поскольку на данный момент доступна только анимация, объекты ScriptPlayable были заменены CustomAnimationPlayable.
  • Больше невозможно получить базовые игровые объекты. Просто объедините Playables в своих пользовательских Playables.

Oculus Rift: обновление вашего проекта с Unity 5.3

Следуйте этим инструкциям, чтобы обновить проект Oculus VR с Unity 5.3:

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

  • Откройте настройки Player (меню: Edit > Project Settings, затем выберите категорию Player).
  • Выберите Other Settings и установите флажок Virtual Reality Supported. Используйте список Virtual Reality SDK, отображаемый под флажком, чтобы добавлять и удалять устройства виртуальной реальности для каждой цели сборки.

Удалить Oculus Spatializer.

  • Удалите аудиоплагин Oculus Spatializer из своего проекта с помощью настроек аудио (меню: Edit > Project Settings, затем выберите категорию Audio). ), используя раскрывающееся меню плагина Spatializer. Это может конфликтовать с собственным пространственным модулем и препятствовать построению.

Изменение порядка элементов

Внесены изменения в события, которые запускаются, когда одноуровневый GameObjectsосновной объект в сценах Unity, который может представлять персонажи, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. в Словарь
переупорядочены в Unity 5.4. Одноуровневые игровые объекты — это игровые объекты, которые имеют одного и того же родителя в окне иерархии. В предыдущих версиях Unity изменение порядка одноуровневых объектов GameObject приводило к тому, что каждый одноуровневый объект получал вызов OnTransformParentChanged. В версии 5.4 родственные объекты GameObject больше не получают этот вызов. Вместо этого родительский объект GameObject получает единственный вызов OnTransformChildrenChanged.

Это означает, что если в вашем проекте есть код, который полагается на вызов OnTransformParentChanged при переупорядочении одноуровневых элементов, эти вызовы больше не будут выполняться, и вам потребуется обновить код, чтобы принять меры. когда родительский объект вместо этого получает вызов OnTransformChildrenChanged.

Это изменилось, поскольку новое поведение повышает производительность.

Перестановка больших иерархий игровых объектов во время выполнения

Благодаря оптимизации в компоненте Transformкомпонент Transform определяет положение, поворот и масштаб каждого объекта в сцене. Каждый GameObject имеет Transform. Подробнее
См. в Словарь
, используя Transform.SetParent или Destroyчастей иерархий, включающих более 1000 игровых объектов, теперь может занимать много времени. Не рекомендуется вызывать SetParent или иным образом переупорядочивать такие большие иерархии во время выполнения.

Магазин Windows

Формат сгенерированного проекта Visual Studio был обновлен для всех бэкэнд сценариевплатформы .NET, поддерживающей сценарии в Unity. Unity поддерживает три различных бэкэнда для сценариев в зависимости от целевой платформы: Mono, .NET и IL2CPP. Однако универсальная платформа Windows поддерживает только два: .NET и IL2CPP. Дополнительная информация
См. в Словарь
SDK. Это исправляет чрезмерное перестроение, когда в сгенерированном проекте ничего не изменилось. Возможно, вам потребуется удалить существующий сгенерированный файл *.csproj, особенно если он был собран с включенным параметром «Создать проекты C#», чтобы Unity могла создать его повторно.

Ошибки сериализации скрипта

Появились две новые ошибки сериализации скрипта, которые необходимо отловить, когда Unity API вызывается из конструкторов и инициализаторов полей во время десериализации (загрузки). Десериализация может происходить в потоке, отличном от основного потока, поэтому небезопасно вызывать Unity API во время десериализации. Дополнительные сведения см. в нижней части страницы (Сериализация скриптов)[script-Serialization] в Руководстве по Unity.

Поддержка экранов Retina

Редактор теперь поддерживает разрешения Retina в Mac OS X с текстом высокого разрешения, UI(пользовательский интерфейс) для взаимодействия с вашим приложением. Подробнее
См. в Словарь
и в 3D-видах.

Графический интерфейс редактора теперь определяется в пространстве точек, а не в пикселяхнаименьших единицах компьютерного изображения. Размер пикселя зависит от разрешения вашего экрана. Пиксельное освещение рассчитывается для каждого пикселя экрана. Подробнее
См. в разделе Словарь
. На дисплеях со стандартным разрешением изменений нет, поскольку каждая точка соответствует одному пикселю. Однако на дисплеях Retina каждая точка равна двум пикселям. Масштаб текущего экрана для пользовательского интерфейса доступен как EditorGUIUtility.pixelsPerPoint. Поскольку Unity может иметь несколько окон, каждое из которых находится на мониторе с разной плотностью пикселей, это значение может меняться между представлениями.

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

Если вы используете Screen.width/height, переключитесь на EditorWindow.position.width/height. Это связано с тем, что размер экрана измеряется в пикселях, а пользовательский интерфейс определяется в точках. Для пользовательских редакторов, отображаемых в инспектореокне Unity, в котором отображается информация о текущем выбранном игровом объекте, активе или настройках проекта, что позволяет вам проверить и отредактировать значения. Дополнительная информация
См. в Словарь
, используйте EditorGUIUtility.currentViewWidth , который правильно учитывает наличие полосы прокрутки.

Если вы отображаете другой контент в своем пользовательском интерфейсе, например RenderTexture, вы, вероятно, рассчитываете его размер в точках. Для поддержки разрешений Retina вам потребуется преобразовать размеры в точках в размеры в пикселях. Для этого в EditorGUIUtility есть новые методы.

Если вы используете GUIStyles с пользовательскими фонами, вы можете добавить версии текстур фона Retina, поместив одну текстуру с точно удвоенными размерами в массив GUIStyleState.scaledBackgrounds.

На компьютерах Mac с недостаточно мощным графическим оборудованием частота кадров редактора в 3D-представлениях может быть неприемлемо низкой из-за повышенного разрешения. Поддержку Retina можно отключить, выбрав «Получить информацию» в Unity.app в Finder и отметив «Открыть в низком разрешении».

Физика: сетки и физика трансформируют дрейф

Есть:

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

Поведение 5.3 заключается в том, что система анимации всегда отправляет сообщения об обновлении преобразования для кривых анимацииПозволяет добавлять данные в импортированный clip, чтобы вы могли анимировать время других элементов в зависимости от состояния аниматора. Например, для игры в ледяных условиях вы можете использовать дополнительную анимационную кривую для управления скоростью излучения системы частиц, чтобы показать сгущающееся дыхание игрока в холодном воздухе. Подробнее
См. в Словарь
, которые являются постоянными. Эти сообщения пробуждают Rigidbodiesкомпонент, который позволяет воздействовать на GameObject смоделированной гравитацией и другими силами. Подробнее
См. в Словарь
, и исправление этого в версии 5.3 оказалось очень рискованным.

Поведение 5.4 заключается в том, что если положение не меняется, Rigidbody не просыпается (как и ожидало большинство людей).

Если ваш проект постоянно использует режим пробуждения Rigidbody версии 5.3, в версии 5.4 он может работать не так, как ожидалось.

Веб-плеер

Цель Unity Web Player удалена из Unity 5.4. Если вы обновите свой проект до версии 5.4, вы не сможете развернуть его на платформе Web Player.

Если у вас есть устаревшие проекты Web Player, которые необходимо поддерживать, не обновляйте их до версии 5.4 или более поздней.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3