Проблемы с Transform.rotation

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

Проблемы с Transform.rotation

Сообщение nikita1221 19 авг 2018, 13:47

Мне понадобилось создавать планки между двум произвольными объектами. Я написал вот такой скрипт:
Синтаксис:
Используется csharp
        void Update () {
                road.localScale = new Vector3( Vector3.Distance (fromk.position, tok.position), 0.3f,0.3f);
                road.position = Vector3.Lerp (fromk.position, tok.position, 0.5f);
                //В этих двух переменных хранится угол, на который нужно поворачивать планку
                float quaz;
                float quay;
                //Проецируем целевые объекты на плосскость
                Vector2 t = new Vector2(tok.position.x, tok.position.y);
                Vector2 f = new Vector2 (fromk.position.x, fromk.position.y);
                //Так как Angle не возвращает углы больше 180, иногда приходится вращать планку в другом направлении
                //Честно не знаю, почему в зависимости от положения по координате x нужно менять знаки, но по другому не работает
                if (fromk.position.x < tok.position.x) {
                        if (fromk.position.y > tok.position.y) {
                                quaz = Vector2.Angle (Vector2.right, t - f) * -1;
                        } else {
                                quaz = Vector2.Angle (Vector2.right, t - f);   
                        }
                } else {
                        if (fromk.position.y > tok.position.y) {
                                quaz = Vector2.Angle (Vector2.right, t - f);
                        } else {
                                quaz = Vector2.Angle (Vector2.right, t - f) * -1;      
                        }
                }
                t = new Vector2 (tok.position.x, tok.position.z);
                f = new Vector2 (fromk.position.x, fromk.position.z);
                if (fromk.position.z > tok.position.z) {
                        quay = Vector2.Angle (Vector2.right, t - f);
                } else {
                        quay = Vector2.Angle (Vector2.right, t - f)*-1;
                }
                road.rotation = Quaternion.Euler(new Vector3(0,quay,quaz));
        }

Пока планку нужно вращать только по оси z или только по оси y (соответственно fromk.position.z == tok.position.z или fromk.position.у == tok.position.у), всё работает просто прекрасно. Но если объекты смещены по обоим осям, происходит что-то непонятное, и планка повёрнута совершенно не так как надо. В чём дело?
Вот как это должно работать:
Изображение
Что в итоге получается:
Изображение
nikita1221
UNец
 
Сообщения: 49
Зарегистрирован: 02 ноя 2015, 11:37

Re: Проблемы с Transform.rotation

Сообщение 1max1 19 авг 2018, 14:45

transform.forward = target.position - transform.position

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

Re: Проблемы с Transform.rotation

Сообщение Cr0c 19 авг 2018, 14:45

Можно просто задавать forward планке
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: Проблемы с Transform.rotation

Сообщение nikita1221 19 авг 2018, 15:28

Как оказывается, всё просто.
Спасибо, forward сработал.
nikita1221
UNец
 
Сообщения: 49
Зарегистрирован: 02 ноя 2015, 11:37


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

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

Сейчас этот форум просматривают: Google [Bot] и гости: 27