added portals
This commit is contained in:
@@ -16,9 +16,9 @@ public class StencilPortal : MonoBehaviour
|
||||
public LayerMask portalLayer;
|
||||
public PortalScene portalScene;
|
||||
public OcclusionPortal occlusionPortal;
|
||||
|
||||
|
||||
public bool _shouldTeleport;
|
||||
|
||||
|
||||
public static Vector3 TransformPositionBetweenPortals(StencilPortal sender, StencilPortal target, Vector3 position)
|
||||
{
|
||||
return
|
||||
@@ -33,12 +33,13 @@ public class StencilPortal : MonoBehaviour
|
||||
Quaternion.Inverse(sender.normalVisible.rotation) *
|
||||
rotation;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private void OnTriggerEnter(Collider other)
|
||||
{
|
||||
if (!other.CompareTag("Player")) return;
|
||||
//Debug.Log(transform.name + " player entered and should teleport");
|
||||
if (other.GetComponent<XROrigin>() == null) return;
|
||||
if (occlusionPortal != null)
|
||||
{
|
||||
occlusionPortal.open = !occlusionPortal.open;
|
||||
@@ -54,19 +55,36 @@ public class StencilPortal : MonoBehaviour
|
||||
|
||||
Debug.Log(transform.name + " player entered and should teleport");
|
||||
targetPortal._shouldTeleport = false;
|
||||
|
||||
|
||||
// Move player to target portal collider relative position
|
||||
other.transform.position = TransformPositionBetweenPortals(this, targetPortal, other.transform.position);
|
||||
other.transform.rotation = TransformRotationBetweenPortals(this, targetPortal, other.transform.rotation);
|
||||
|
||||
//rotatePlayer(other,targetPortal);
|
||||
if (destroyAfterTeleport)
|
||||
{
|
||||
Destroy(gameObject, 0.5f);
|
||||
}
|
||||
}
|
||||
private void rotatePlayer(Collider collider, StencilPortal target)
|
||||
{
|
||||
XROrigin Player = collider.GetComponent<XROrigin>();
|
||||
if (target != null && Player != null && Player.Camera != null)
|
||||
{
|
||||
// Calculate the rotation offset needed for the player
|
||||
Vector3 targetEulerAngles = target.transform.rotation.eulerAngles;
|
||||
Vector3 currentCameraEulerAngles = Player.Camera.transform.rotation.eulerAngles;
|
||||
|
||||
// Determine the rotation delta around the Y-axis
|
||||
float rotationDeltaY = targetEulerAngles.y - currentCameraEulerAngles.y - 180;
|
||||
|
||||
// Apply the rotation delta to the XR Origin
|
||||
Player.transform.Rotate(0, rotationDeltaY, 0, Space.World);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnTriggerExit(Collider other)
|
||||
{
|
||||
AllowTeleport();
|
||||
if (!_shouldTeleport || IsInvoking(nameof(AllowTeleport))) return;
|
||||
if (!other.CompareTag("Player")) return;
|
||||
Debug.Log(transform.name + " player exited");
|
||||
|
||||
Reference in New Issue
Block a user