Введение в 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 работает вместе с
TransformHandleAPI в 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/SetSiblingIndexFindhasChangedсвойство
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, из которого они вызваны).
Различные типы аргументов:
IsChildOfLookAtSetParentTranslate(перегрузка)
Различные типы возврата:
GetChildparentroot