Некорректное вращение

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

Некорректное вращение

Сообщение Skinner2170 27 авг 2013, 11:14

Всем доброго времени суток! Очень прошу о помощи со скриптом. Проблема такая: есть манометр, стрелку у которого нужно поворачивать исходя из заданного значения(хранится в public static в другом скрипте). Но вот само вращение происходит по совершенно не понятному алгоритму.

Значения векторов отображаются корректно, но вот само вращение - нет. Скажем если значение Global.manom1 = 100, то угол меняется с 58 до 61.9. А если 150, то 64, хотя очевидно, что так быть не должно.

Если пользоваться transform.Rotate, то стрелка просто вращается без остановки.

С координатами зато творится что-то непонятное, такое впечатление, что на границе каждой четверти(или половины, не совсем понятно) отсчет начинается заново. Что делать то? Как заставить двигаться стрелку от одного положения к другому.

Очень надеюсь на помощь! И заранее спасибо!

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class manom1 : MonoBehaviour {
        private Vector3 defaultRot;
        private Vector3 curRot;
        float smooth = 2;

        // Use this for initialization
        void Start(){
        }
        // Update is called once per frame
        void Update () {
                //Debug.Log(Global.manom2);
               
                if(Global.izm1){
                defaultRot = transform.eulerAngles;
                Debug.Log(Global.manom1);
                Debug.Log(defaultRot);
                curRot = new Vector3 (defaultRot.x + Global.manom1, defaultRot.y, defaultRot.z);
                Debug.Log(curRot);
                transform.eulerAngles = Vector3.Slerp(transform.eulerAngles, curRot, Time.deltaTime * smooth);
                Debug.Log(curRot);
                Global.izm1 = false;                   
                }
               
                //transform.Rotate(Vector3.left, Time.deltaTime * 100);
        }
}
 
Skinner2170
UNец
 
Сообщения: 8
Зарегистрирован: 08 ноя 2012, 10:46

Re: Некорректное вращение

Сообщение 2rusbekov 27 авг 2013, 11:18

Код вращения отрабатывает только 1 кадр. слерп возвращает какую то долю. Взгляните внимательней на условие
Still alive...
Аватара пользователя
2rusbekov
Адепт
 
Сообщения: 1409
Зарегистрирован: 06 апр 2012, 12:57
Откуда: Бишкек

Re: Некорректное вращение

Сообщение Skinner2170 27 авг 2013, 12:08

2rusbekov писал(а):Код вращения отрабатывает только 1 кадр. слерп возвращает какую то долю. Взгляните внимательней на условие


Никак не пойму, что подразумевается под "Код вращения отрабатывает только 1 кадр.". Функция update() срабатывает на каждом кадре, а слерп должен совершить вращение объекта от заданного вектора к конечному(тоже заданному). Я аналогичную идею использовал для открытия и закрытия дверей - там проблем не возникало.
Skinner2170
UNец
 
Сообщения: 8
Зарегистрирован: 08 ноя 2012, 10:46

Re: Некорректное вращение

Сообщение seaman 27 авг 2013, 12:11

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

Ничего не подразумевается. Сказано прямо - "Код вращения отрабатывает только 1 кадр". Без всяких намеков. Даже сказано почему - "Взгляните внимательней на условие".
Хотя, конечно, не просто один кадр, а один кадр после установки Global.izm в true. Так что никакого смысла в SLerp и Time.deltaTime нет
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Некорректное вращение

Сообщение Skinner2170 27 авг 2013, 12:49

seaman писал(а):Ничего не подразумевается. Сказано прямо - "Код вращения отрабатывает только 1 кадр". Без всяких намеков. Даже сказано почему - "Взгляните внимательней на условие".
Хотя, конечно, не просто один кадр, а один кадр после установки Global.izm в true. Так что никакого смысла в SLerp и Time.deltaTime нет


Спасибо! Даже стыдно за такую ошибку :). Но все еще не понятно, как заставить стрелку поворачиваться в нужную сторону(по часовой )? SLerp только от 0 до 360, да и к тому же если я хочу повернуть от 58 до 270 скажем, то стрелка вращается через(насквозь) манометра! Что посоветуете? Может я не правильно понимаю работу слерп или в чем проблема?

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class manom1 : MonoBehaviour {
        private Vector3 defaultRot;
        private Vector3 curRot;
        float smooth = 2;

        // Use this for initialization
        void Start(){
                defaultRot = transform.eulerAngles;
                curRot = new Vector3 (defaultRot.x + Global.manom1, defaultRot.y, defaultRot.z);
        }
        // Update is called once per frame
        void Update () {
                //Debug.Log(Global.manom2);
               
                if(Global.izm1){
                Debug.Log(Global.manom1);
                Debug.Log(defaultRot);
               
                Debug.Log(curRot);
                transform.eulerAngles = Vector3.Slerp(transform.eulerAngles, curRot, Time.deltaTime * smooth);
                Debug.Log(curRot);
                //Global.izm1 = false;         
                }
                //Global.izm1 = false; 
                //transform.Rotate(Vector3.left, Time.deltaTime * 100);
        }
}
Skinner2170
UNец
 
Сообщения: 8
Зарегистрирован: 08 ноя 2012, 10:46

Re: Некорректное вращение

Сообщение seaman 27 авг 2013, 15:21

Весьма интересная интерпретация углов. Вы нарисуйте Ваши "вектора" defaultRot/curRot и посмотрите что Вы хотите сделать.
Что Вы получите создав вектор(250 градусов, 30 градусов, 79 градусов)? Ну никак не вектор повернутый на эти градусы.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара


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

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

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