示例#1
0
    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;
        }
    }
示例#2
0
    //Функция которая определяет находится ли наш объект с указанными координатами за порталом
    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);
    }