// Update is called once per frame void FixedUpdate() { for (int i = 0; i < travellers.Count; i++) { PortalTravllerScript pt = travellers[i]; Transform t = pt.transform; Vector3 offset = t.position - transform.position; int sideOfPortal = (int)Mathf.Sign(Vector3.Dot(offset, transform.forward)); int prevSideOfPortal = (int)Mathf.Sign(Vector3.Dot(pt.prevOffset, transform.forward)); if (sideOfPortal != prevSideOfPortal) { var m = linkedPortal.transform.localToWorldMatrix * transform.worldToLocalMatrix * player.transform.localToWorldMatrix; pt.Teleport(transform, linkedPortal.transform); travellers.RemoveAt(i); Debug.Log("Crossed"); break; } pt.prevOffset = offset; } }
void OnEnityEnter(PortalTravllerScript traveller) { if (!travellers.Contains(traveller)) { traveller.EnterPortalThreshhold(); traveller.prevOffset = traveller.transform.position - transform.position; travellers.Add(traveller); } }