Unity 6.3
0 онлайн 8 гостей 3 в системе
Вход

Введение в TransformHandle API

TransformHandle API является альтернативой Transform API. В отличие от Transform компонент (управляемый класс), TransformHandle является неуправляемым struct, что делает его полностью совместимым с Burst компилятор.

В то время как TransformHandle API охватывает те же основные операции, что и Transform API, его конструкция вводит несколько ключевых различий, описанных на этой странице.

Различия с Transform API

Функциональность TransformHandle API эквивалентна Transform API, основные различия заключаются в способе доступа к ней и в деталях реализации.

Transform API (Unity 6.2 и ранее):

  • Вы получаете доступ к преобразованию, используя свойство GameObject.transform.
  • Свойство transform возвращает ссылку на компонент Transform (управляемый тип).
  • Компилятор API управляется и не совместим с компилятором Burst.
  • API работает вместе с TransformHandle API в Unity 6.

TransformHandle API (Unity 6.3 и позднее):

  • Вы получаете доступ к преобразованию, используя gameObject.transformHandle или transform.GetTransformHandle (где transform является компонентом Transform).
  • Возвращает a TransformHandle структура (неуправляемый тип).
  • Совместим с компилятором Burst и может использоваться в заданиях, компилируемых Burst.
  • Обеспечивает совместимость с будущими взаимодействиями субъекта и GameObject.
  • TransformHandle API используется только во время выполнения.

Transform APIs, которые не доступны в TransformHandle API

Следующие методы и свойства из Transform APIs недоступны в TransformHandle API:

  • GetSiblingIndex / SetSiblingIndex
  • Find
  • hasChanged свойство

TransformHandle API без эквивалента в Transform API

Следующие элементы TransformHandle API не имеют эквивалента в Transform API.

  • TransformHandle.DirectChildrenEnumerable представляет перечисляемые прямые дети transformHandle, и этот перечисляемый возвращает DirectChildrenEnumerator при перечислении.

  • TransformHandle.DirectChildrenEnumerator — это перечислитель, который проходит через прямых детей преобразования.

  • TransformHandle.DirectChildren возвращает DirectChildrenEnumerable этого преобразования, которое можно использовать для итерации над прямыми детьми с циклом foreach.

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

Различия в общих операциях

Следующие общие операции имеют различную реализацию в TransformHandle API.

Проверка действительности преобразования:

  • Transform: transform != null
  • TransformHandle: TransformHandle.IsValid

Итерация прямых детей преобразования:

  • Transform: foreach (Transform t in transform)
  • TransformHandle: foreach (TransformHandle t in handle.DirectChildren)

Установить родитель преобразования в None:

  • Transform: transform.SetParent(null)

  • TransformHandle:

    transformHandle.SetParent(TransformHandle.None)
    

    или

    TransformHandle h = transformHandle;
    h.parent = TransformHandle.None;
    

Для конкретных примеров использования API, см. TransfromHandle API примеры.

Методы с различными типами аргументов или возврата

Следующие методы функционально эквивалентны, но имеют разные типы аргументов или типы возврата (Transformили TransformHandle в зависимости от API, из которого они вызваны).

Различные типы аргументов:

  • IsChildOf
  • LookAt
  • SetParent
  • Translate (перегрузка)

Различные типы возврата:

  • GetChild
  • parent
  • root

Дополнительные ресурсы