Как я могу отразить (и повернуть) объект через линию, как если бы это был портал? - PullRequest
1 голос
/ 15 апреля 2019

Я хочу создать эффект 2D портала.Таким образом, объект, выходящий из выходного портала, должен соответствовать по местоположению / повороту объекту, проходящему через входной портал.Это до тех пор, пока половина исходного объекта не пройдет через портал.

Я создал спрайтовый куб, который должен быть отражен по линии (портал).Выходящий из портала куб - это просто клон оригинала.Если мы вращаем портал, «отражающий» куб должен вращаться вместе с расположением исходного куба по сравнению с порталом.Если мы вращаем сам оригинальный куб, то «отражение» также должно быть отражено относительно портала.Я просто не могу понять, какие вращения делать и в каком пространстве.Я пробовал много вещей с локальными преобразованиями и т. Д.

Я использую Vector2.Reflect, чтобы получить правильную позицию для отражения:

Vector2.Reflect(
  (line.transform.position - cube.transform.position), line.transform.up
);

Изображение 1

Чтобы отразить куб как отражение, я добавляю это вращение:

reflection.transform.localRotation = Quaternion.Euler(0, 180, 0)
  * cube.transform.localRotation;

Но теперь, если я вращаю портал, отражение должно вращаться так же, как вращается оригинальный куб в пространствепортал, как здесь плохо прорисовано:

Изображение 2

Кто-нибудь знает, какие правильные преобразования / вращения используются для этого, например, вычисления localRotation / localTransform?Я так много пытался, но где-то на этом пути мое понимание правильной математики теряется.

Извините, пока не могу опубликовать изображения:)

1 Ответ

0 голосов
/ 15 апреля 2019

Я бы предложил просто отразить cube.transform.forward:

reflection.transform.forward = Vector2.Reflect(cube.transform.forward, line.transform.up);
...