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

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

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

Сообщение NOVA 17 дек 2018, 10:58

Такая ситуация. Есть два поворота последовательно. Первый нивкакую работать не хочет, если не закомментить второй. Как такое может быть?

Синтаксис:
Используется 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);
            }

 

Такое ощущение, что просто не успевает
Аватара пользователя
NOVA
Адепт
 
Сообщения: 1741
Зарегистрирован: 17 май 2011, 11:45
Откуда: Дядя Саша from Mother Russia

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

Сообщение seaman 17 дек 2018, 12:14

Вы вращаете вокруг одной оси, только в разных направлениях. Почему бы не объединить в один поворот?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

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

Сообщение NOVA 17 дек 2018, 17:51

Не. Оси разные. Имена векторов кажутся похожими. Вероятно нет же способа дождаться выполнения поворота, если не поставить условие?
Аватара пользователя
NOVA
Адепт
 
Сообщения: 1741
Зарегистрирован: 17 май 2011, 11:45
Откуда: Дядя Саша from Mother Russia

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

Сообщение 1max1 17 дек 2018, 18:04

Код выполняется последовательно, никаких задержек там не должно быть.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

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

Сообщение NOVA 17 дек 2018, 19:02

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);
                }
            }

 


Как буд-то скрипт выполняется дальше, а поворот в какую-то очередь выполнения забрасывается. Но не успевает выполниться и выполняется следующий поворот.
Аватара пользователя
NOVA
Адепт
 
Сообщения: 1741
Зарегистрирован: 17 май 2011, 11:45
Откуда: Дядя Саша from Mother Russia

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

Сообщение Tolking 17 дек 2018, 19:13

transform.RotateAround, видимо, не делает преобразование в реалтайме, а логика построена так будто поворот уже выполнен. Выведи поворот до и посте поворота.
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2715
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

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

Сообщение NOVA 17 дек 2018, 21:53

Спасибо всё допёрло как надо сделать.
Аватара пользователя
NOVA
Адепт
 
Сообщения: 1741
Зарегистрирован: 17 май 2011, 11:45
Откуда: Дядя Саша from Mother Russia


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26