Какой самый эффективный и быстрый способ конвертировать Vector3 в Vector2?
Кастинг:
Vector2 vector2 = (Vector2)vector3;
Инициализация нового Vector2:
Vector2 vector2 = new Vector2(vector3.x, vector3.y);
Или есть другой метод, который я не знаю?
unity
c#
performance
С. Тарык Четин
источник
источник
Ответы:
http://docs.unity3d.com/ScriptReference/Vector2-operator_Vector3.html
Если вам нужно сделать много конверсий, вам, возможно, придется изменить способ использования векторов. Сделайте два теста и рассчитайте, какой из них вам подходит.
ОБНОВЛЕНИЕ С ТЕСТАМИ: Так как вы спросили, какой из них самый быстрый, я создал тест, в котором 10000000 конверсий каждого в Unity. Похоже, что Инициализирующая версия является самой быстрой в этом случае. НО, вы всегда должны использовать тот, который соответствует вашему собственному контексту, поэтому я советую вам запускать собственные тесты в своей игре.
источник
y
вверх. ПреобразовываяVector3
в aVector2
, вы почти всегда хотите,x
аz
неx
иy
.И Vector2, и Vector3 являются структурой в движке Unity, поэтому создание одного из другого просто включает выделение хранилища в стеке (если место назначения не является атрибутом объекта класса , что позволило бы пропустить этот первый шаг) и копирование двух значений компонентов. Оба механизма, которые вы даете, должны быть скомпилированы именно для этого кода IL.
Если вы столкнулись с проблемой производительности с преобразованием этого типа , то вы , вероятно, бокс проблемы с структура преобразуются в и затем из класса объекта. В этом случае вам следует выяснить, можно ли избежать , когда и как, в определенных частях кода, связанных с производительностью , бокса .
источник
Из моего теста лучший способ сделать это - вручную установить его значение.
Это мой результат, который я расширяю от Маттиаса.
Обратите внимание, я тестирую его с единой версией 5.6.5
источник