public void Portate(GameObject StartPortal, GameObject EndPortal) { if (!IsShadow) //Если наш объект не является "тенью" то разрешаем его телепортацию { ThisPortal = StartPortal; ShadowPortal = StartPortal; //Ставим теневой объект за вторым поратолом //Для начала определяем координаты текущего объекта относительно портала var ObjectCoord = transform.position; var PortalCoord = StartPortal.transform.position; var PortalAngles = StartPortal.transform.eulerAngles; var ShadowCoordAtPortal = TransformCoord.Transform(ObjectCoord, PortalCoord, PortalAngles); //Затем ставим теневой объект за вторым порталом точно так же расположен первый объект относительно порала //Только инвертируем координату у, чтобы объект был за порталом ShadowCoordAtPortal.y *= -1; //Теперь изменияем вектор скорости для теневого объекта var ShadowVelocity = RBody.velocity; //Сначала поворачивем наш вектор на нунжый угол var Angles = EndPortal.transform.eulerAngles - StartPortal.transform.eulerAngles; ShadowVelocity = TransformCoord.Rotate(ShadowVelocity, Angles); ShadowVelocity *= -1; Shadow.SetShadowPortate(StartPortal, EndPortal, ShadowVelocity, ShadowCoordAtPortal); isPortate = true; } }
//Функция которая определяет находится ли наш объект с указанными координатами за порталом private bool BehingThePortal(Vector3 ObjectCoord, GameObject Portal) { var PortalCoord = Portal.transform.position; var PortalAngles = -1 * Portal.transform.eulerAngles; var ObjectCoordAtPorlat = TransformCoord.Transform(ObjectCoord, PortalCoord, PortalAngles); return(ObjectCoordAtPorlat.y < 0); }