Мои порталы перестают работать, когда вы их поворачиваете Unity 3d C#
Я сделал гладкие порталы в Unity, и они работают как часы, пока я не поверну их. Я надеялся, что кто-нибудь предложит другой способ решения проблемы рендеринга порталов. Вот мой код для камеры рендеринга:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PortalCamera : MonoBehaviour
{
public Transform playerCamera;
public Transform portal;
public Transform otherPortal;
void LateUpdate()
{
Vector3 playerOffset2Camera = playerCamera.position - otherPortal.position;
transform.position = portal.position + playerOffset2Camera;
float angleDiffBtwPortalRotations = Quaternion.Angle(portal.rotation, otherPortal.rotation);
Quaternion portalRotationalDiff = Quaternion.AngleAxis(angleDiffBtwPortalRotations, Vector3.up);
Vector3 newCamRotation = portalRotationalDiff * playerCamera.forward;
transform.rotation = Quaternion.LookRotation(newCamRotation, Vector3.up);
}
}
На данный момент проблема в следующем:
Vector3 playerOffset2Camera = playerCamera.position - otherPortal.position;
transform.position = portal.position + playerOffset2Camera;
Здесь скрипт вычисляет расстояние между игроком и порталом А, а затем использует это значение для расстояния между порталом_b и камерой_b, которое используется для рендеринга портала. Это создает эффект плавности при прохождении, как в играх Portal и Portal2 от Valve.
Проблема, которую я обнаружил, заключается в том, что когда вы поворачиваете портал, камера делает то, что ей приказано, и остается в том положении, в котором находится игрок, но, поскольку портал повернут, он находится не под тем углом, под которым должен находиться, и это портит всю иллюзию. Мне нужно найти способ изменить вращение «смещения», созданного для камеры, чтобы иллюзия не разрушалась.
Я пробовал несколько вещей, например, изменение расчета смещения на GameObject, который вращается вместе с порталом, но координаты xyz не меняются, поэтому это не сработало.