Повернутый портал неправильно работает

Я хочу сделать порталы схожие с порталами из игры портал. Одинаково наклоненные порталы по осям x и y работают как и задумывалось. А если портал наклонить, то он странно телепортирует объекты. Для телепортации объекта код изменяет положение объекта на сумму положения другого портала и повернутую разность положений объекта и этого портала. Для тестов я написал написал логику для телепортации тестового объекта. Видео с проблемой

Телепортация игрока:

    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "Player" && _canTeleport)
        {
            Vector3 offset = other.transform.position - transform.position;
            Quaternion rotation = Quaternion.Euler(_otherPortal.transform.rotation.eulerAngles - transform.rotation.eulerAngles);
            _testObject.transform.position = _otherPortal.transform.position + rotation * offset;
            
            _mainCamera.transform.rotation = Quaternion.Euler(_mainCamera.transform.rotation.eulerAngles + (_otherPortal.transform.rotation.eulerAngles.y - transform.rotation.eulerAngles.y + 180) * Vector3.up);
            _playerRb.velocity = Quaternion.Inverse(Quaternion.Euler(transform.rotation.eulerAngles - _otherPortal.transform.rotation.eulerAngles + 180 * Vector3.up)) * _playerRb.velocity;
            _otherPortal.CanTeleport = false;
        }
    }

Телепортация тестового объекта

    private void OnTriggerStay(Collider other)
    {
        Vector3 offset = other.transform.position - transform.position;
        Quaternion rotation = Quaternion.Euler(_otherPortal.transform.rotation.eulerAngles - transform.rotation.eulerAngles);
        _testObject.transform.position = _otherPortal.transform.position + rotation * offset;
    }

Ответы (1 шт):

Автор решения: Rastrey

Нужно было не "вычитать", а умножать кватернионы

→ Ссылка