Как повысить точность поворота?

Программирование на Юнити.

Как повысить точность поворота?

Сообщение Parallax 24 ноя 2011, 09:16

Здравствуйте! написал скрипт, который поворачивает объект после нажатия кнопки мыши:
Синтаксис:
Используется javascript
var speed = 10.0F;
var angle = 30.0F;

private var klik : boolean = false;
private var stop : boolean = false;

private var yRotation : float ;

function Update () {

        if (Input.GetMouseButtonUp(0)) {
                klik = true;
        }      

        if (klik == true){
                yRotation = 0.1F*Time.deltaTime*speed;
                transform.Rotate(0, yRotation, 0);

                if ((transform.eulerAngles.y) >= angle){
                        stop = true;
                }
        }

        if (stop == true){
                klik = false;
        }
}
 


В данном случае меня не устраивает точность поворота. При развороте объекта на целое число градусов проблем нет.
Но если переменной angle указать значение, например, 21.16, то transform.eulerAngles.y после разворота все равно проскакивает значение angle. (например, становится 21.27)

В общем, помогите понять, как развернуть объект так, чтобы угол после поворота точно соответствовал заданному значению angle вплоть до второго знака после запятой?
Parallax
UNец
 
Сообщения: 15
Зарегистрирован: 24 сен 2011, 09:58

Re: Как повысить точность поворота?

Сообщение IDoNotExist 24 ноя 2011, 11:12

Синтаксис:
Используется javascript

var speed = 10.0F;
var angle = 30.0F;

private var klik : boolean = false;
private var stop : boolean = false;

private var yRotation : float ;

function Update () {

        if (Input.GetMouseButtonUp(0)) {
                klik = true;
        }      

        if (klik == true){
                yRotation = 0.1F*Time.deltaTime*speed;
                transform.Rotate(0, yRotation, 0);

                if ((transform.eulerAngles.y) >= angle){
                        transform.Rotate(0, angle, 0);
                        stop = true;
                }
        }

        if (stop == true){
                klik = false;
        }
}

 


Найдите 10 отличий.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: Как повысить точность поворота?

Сообщение raul82 24 ноя 2011, 11:28

придеца отказаца от Time.deltaTime и поставить вместо него например 0.1
Time.deltaTime каждый кадр возвращает разное значение, равное времени прорисовки предыдущего кадра
както так
или попробовать использовать slerp
Quaternion.Slerp(transform.rotation,Quaternion.Euler(0,ransform.eulerAngles.y +angle,0),Time.deltaTime*speed);
5 годиков 7 месяцев
Аватара пользователя
raul82
Старожил
 
Сообщения: 506
Зарегистрирован: 21 янв 2011, 17:48
Откуда: Алматы

Re: Как повысить точность поворота?

Сообщение raul82 24 ноя 2011, 11:49

или так :D , но будет маленький поворотик назад
Синтаксис:
Используется csharp
        if (klik == true){
                yRotation = 0.1F*Time.deltaTime*speed;
                transform.Rotate(0, yRotation, 0);

                if ((transform.eulerAngles.y) >= angle){
                        float delta =   angle -transform.eulerAngles.y

                        transform.Rotate(0, delta, 0);
                        stop = true;
                }
        }
5 годиков 7 месяцев
Аватара пользователя
raul82
Старожил
 
Сообщения: 506
Зарегистрирован: 21 янв 2011, 17:48
Откуда: Алматы

Re: Как повысить точность поворота?

Сообщение waruiyume 24 ноя 2011, 13:03

Синтаксис:
Используется javascript
transform.rotation =
        Quaternion.RotateTowards(transform.rotation, Quaternion.Euler(0, angle, 0),speed*Time.deltaTime);
 
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Как повысить точность поворота?

Сообщение raul82 24 ноя 2011, 13:18

waruiyume писал(а):
Синтаксис:
Используется javascript
transform.rotation =
        Quaternion.RotateTowards(transform.rotation, Quaternion.Euler(0, angle, 0),speed*Time.deltaTime);
 

я досихпор думаю что 2 параметр Quaternion.RotateTowards это куда повернуть, а не на сколько... разве нет? :-w
5 годиков 7 месяцев
Аватара пользователя
raul82
Старожил
 
Сообщения: 506
Зарегистрирован: 21 янв 2011, 17:48
Откуда: Алматы

Re: Как повысить точность поворота?

Сообщение Parallax 25 ноя 2011, 10:23

Спасибо, друзья, за советы! Я понял, куда копать надо :-bd
Пока изучал класс Mathf, сварганил еще один способ поворота:
Синтаксис:
Используется javascript
var speed = 10.0;
var target = 30.0;

var klik : boolean = false;
private var pusk : boolean = false;
var stop : boolean = false;

function Update () {
        if (Input.GetMouseButtonUp(0)) {
                if (klik == false){
                        klik = true;
                        stop = false;
                }
                if (pusk == true){
                        klik = false;
                        pusk = false;
                }              
        }
        if (stop == true){
             klik = false;
        }      
        var angle : float = Mathf.MoveTowardsAngle(transform.eulerAngles.y, target, speed * Time.deltaTime);                           
        if      (klik == true){
                pusk = true;   
                transform.eulerAngles = Vector3(0, angle, 0);
                if ((Mathf.Abs((transform.eulerAngles.y) - (target))) < 0.001){
                        stop = true;
                }              
        }
}
 

Получается довольно точно и лаконично)
Parallax
UNец
 
Сообщения: 15
Зарегистрирован: 24 сен 2011, 09:58


Вернуться в Скрипты

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

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