Страница 1 из 1

Долго ли длится метод поворота?

СообщениеДобавлено: 17 дек 2018, 10:58
NOVA
Такая ситуация. Есть два поворота последовательно. Первый нивкакую работать не хочет, если не закомментить второй. Как такое может быть?

Синтаксис:
Используется csharp
 float e = (Camera1.transform.position - RotPoint).magnitude;
            float A = Vector3.Angle(Camera1.transform.TransformDirection(MidVector1).normalized, Camera1.transform.TransformDirection(UpVector1).normalized);
           
            Vector3 Point = RotPoint + Camera0.transform.TransformDirection(UpMoveVector0);
           
            float a = (Point - RotPoint).magnitude;
            float K = Vector3.Angle((RotPoint - Point).normalized, (Camera1.transform.position - Point).normalized);
           
            float GK = Mathf.Asin(e*Mathf.Sin(A* Mathf.Deg2Rad)/a)* Mathf.Rad2Deg;
            Debug.Log("GK = " + GK + " RealGK = " + Vector3.Angle((RotPoint-Point).normalized , (Camera1.transform.position-Point).normalized));
           
            float J = Vector3.Angle((Point-Camera1.transform.position).normalized, (RotPoint - Camera1.transform.position).normalized);
            float C =  - J - K + A + GK;
           
            Debug.Log(C);
            Vector3 RotCross = Vector3.Cross(Camera1.transform.TransformDirection(UpMoveVector1), Camera1.transform.TransformDirection(UpVector1));
             Camera1.transform.RotateAround(RotPoint, RotCross, C);
           

            //Rotate MOVEVECTOR1 TO MOVEVECTOR0
            float Angle = Vector3.Angle(Camera0.transform.TransformDirection(UpMoveVector0).normalized, Camera1.transform.TransformDirection(UpMoveVector1).normalized);
            RotCross = Vector3.Cross(Camera0.transform.TransformDirection(UpMoveVector0), Camera1.transform.TransformDirection(UpMoveVector1));
           
            if (Angle > 0)
            {
               Camera1.transform.RotateAround(RotPoint, -RotCross, Angle);
            }

 

Такое ощущение, что просто не успевает

Re: Долго ли длится метод поворота?

СообщениеДобавлено: 17 дек 2018, 12:14
seaman
Вы вращаете вокруг одной оси, только в разных направлениях. Почему бы не объединить в один поворот?

Re: Долго ли длится метод поворота?

СообщениеДобавлено: 17 дек 2018, 17:51
NOVA
Не. Оси разные. Имена векторов кажутся похожими. Вероятно нет же способа дождаться выполнения поворота, если не поставить условие?

Re: Долго ли длится метод поворота?

СообщениеДобавлено: 17 дек 2018, 18:04
1max1
Код выполняется последовательно, никаких задержек там не должно быть.

Re: Долго ли длится метод поворота?

СообщениеДобавлено: 17 дек 2018, 19:02
NOVA
1max1 писал(а):Код выполняется последовательно, никаких задержек там не должно быть.

Сам вужосе.

Вот так работают. Оба поворота. Но тот который с формулами (первый) работает после того как не нажаты клавиши)) Хотя он блин первый. Как так - то?
Синтаксис:
Используется csharp
float e = (Camera1.transform.position - RotPoint).magnitude;
            float A = Vector3.Angle(Camera1.transform.TransformDirection(MidVector1).normalized, Camera1.transform.TransformDirection(UpVector1).normalized);
           
            Vector3 Point = RotPoint + Camera0.transform.TransformDirection(UpMoveVector0);
           
            float a = (Point - RotPoint).magnitude;
            float K = Vector3.Angle((RotPoint - Point).normalized, (Camera1.transform.position - Point).normalized);
           
            float GK = Mathf.Asin(e*Mathf.Sin(A* Mathf.Deg2Rad)/a)* Mathf.Rad2Deg;
            Debug.Log("GK = " + GK + " RealGK = " + Vector3.Angle((RotPoint-Point).normalized , (Camera1.transform.position-Point).normalized));
           
            float J = Vector3.Angle((Point-Camera1.transform.position).normalized, (RotPoint - Camera1.transform.position).normalized);
            float C =  - J - K + A + GK;
           
            Debug.Log(C);
            Vector3 RotCross = Vector3.Cross(Camera1.transform.TransformDirection(UpMoveVector1), Camera1.transform.TransformDirection(UpVector1));
             Camera1.transform.RotateAround(RotPoint, RotCross, C);
           

            UpVector0Lenght = (RotPoint + Camera0.transform.TransformDirection(UpMoveVector0) - Camera0.transform.position).magnitude;
           
            if (Input.GetKey(KeyCode.Z))
            {
                UpVector0Lenght -= 0.01f;
                UpMoveVector0 = Camera0.transform.InverseTransformDirection(Camera0.transform.position + Camera0.transform.TransformDirection(UpVector0).normalized * UpVector0Lenght - RotPoint);
               
                float Angle = Vector3.Angle(Camera0.transform.TransformDirection(UpMoveVector0).normalized, Camera1.transform.TransformDirection(UpMoveVector1).normalized);
                Vector3 NewRotCross = Vector3.Cross(Camera0.transform.TransformDirection(UpMoveVector0), Camera1.transform.TransformDirection(UpMoveVector1));

                if (Angle > 0)
                {
                    Camera1.transform.RotateAround(RotPoint, -NewRotCross, Angle);
                }
            }
            if (Input.GetKey(KeyCode.X))
            {
                UpVector0Lenght += 0.01f;
                UpMoveVector0 = Camera0.transform.InverseTransformDirection(Camera0.transform.position + Camera0.transform.TransformDirection(UpVector0).normalized * UpVector0Lenght - RotPoint);
               
                float Angle = Vector3.Angle(Camera0.transform.TransformDirection(UpMoveVector0).normalized, Camera1.transform.TransformDirection(UpMoveVector1).normalized);
                Vector3 NewRotCross = Vector3.Cross(Camera0.transform.TransformDirection(UpMoveVector0), Camera1.transform.TransformDirection(UpMoveVector1));

                if (Angle > 0)
                {
                    Camera1.transform.RotateAround(RotPoint, -NewRotCross, Angle);
                }
            }

 


Как буд-то скрипт выполняется дальше, а поворот в какую-то очередь выполнения забрасывается. Но не успевает выполниться и выполняется следующий поворот.

Re: Долго ли длится метод поворота?

СообщениеДобавлено: 17 дек 2018, 19:13
Tolking
transform.RotateAround, видимо, не делает преобразование в реалтайме, а логика построена так будто поворот уже выполнен. Выведи поворот до и посте поворота.

Re: Долго ли длится метод поворота?

СообщениеДобавлено: 17 дек 2018, 21:53
NOVA
Спасибо всё допёрло как надо сделать.