Проблема с поворотом спрайта.

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

Проблема с поворотом спрайта.

Сообщение zulec 10 ноя 2018, 06:06

Доброй ночи, когда я пытаюсь повернуть объект на 180 градусов по z, то он поворачивается.
При повторной попытке поворота объекта, он не переворачивается (хотя по сути он должен принять значение 360 градусов по z, но остаются всё те же 180 градусов...) , не могу понять в чём проблема.
Код:
Синтаксис:
Используется csharp
spr.transform.localRotation = Quaternion.Slerp(spr.transform.localRotation, Quaternion.Euler(spr.transform.localRotation.x, spr.transform.localRotation.y, spr.transform.localRotation.z + 180f), speedRotation);
speedRotation += Time.deltaTime;
 


Код вызывается в FixedUpdate, когда персонаж находится в воздухе.
speedRotation при инициализации равен 0.
zulec
UNец
 
Сообщения: 7
Зарегистрирован: 10 ноя 2018, 05:52

Re: Проблема с поворотом спрайта.

Сообщение DimaJoke 10 ноя 2018, 06:51

Перед тем, в чём ты это измеряешь
Надо ставить new
Синтаксис:
Используется csharp
obj.transform.rotation = new Quatqrnion()
дяя я не знаю, как пишется кватренион)))
Ну или так же с Vector3
Синтаксис:
Используется csharp
transform.position = new Vector3()
Что бы повзрослеть, человек должен преодолеть ошибки юности.

Поэтому я снова здесь..
Аватара пользователя
DimaJoke
UNITрон
 
Сообщения: 293
Зарегистрирован: 12 авг 2018, 18:59
Откуда: Ульяновск
  • Сайт

Re: Проблема с поворотом спрайта.

Сообщение zulec 10 ноя 2018, 07:27

Смысл ставить "new"? Если я потом не смогу использовать метод Slerp.
zulec
UNец
 
Сообщения: 7
Зарегистрирован: 10 ноя 2018, 05:52

Re: Проблема с поворотом спрайта.

Сообщение 1max1 10 ноя 2018, 09:28

Первое что смущает - это speedRotation += Time.deltaTime;
Что по твоему это оно должно делать?
И еще, в каждом кадре, твое конечное значение будет зависеть от предыдущего:
Синтаксис:
Используется csharp
Quaternion.Euler(spr.transform.localRotation.x, spr.transform.localRotation.y, spr.transform.localRotation.z + 180f)

Странно, что у тебе оно вообще работает как ты хочешь)
Синтаксис:
Используется csharp
class XXX : MonoBehaviour
{
    const float speedRotation = 5.0f;

    Coroutine coroutine;

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            if (coroutine != null)
            {
                StopCoroutine(coroutine);
            }

            coroutine = StartCoroutine(c_Rotate());
        }
    }

    IEnumerator c_Rotate()
    {
        Quaternion r180 = transform.rotation * Quaternion.AngleAxis(180.0f, transform.forward);

        while (true)
        {
            transform.rotation = Quaternion.Lerp(transform.rotation, r180, speedRotation * Time.deltaTime);

            if (transform.rotation.Equals(r180))
            {
                yield break;
            }
            else
                yield return null;
        }
    }
}
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Проблема с поворотом спрайта.

Сообщение zulec 10 ноя 2018, 10:27

Спасибо большое!
Но теперь появилась другая проблема, просчёт идёт с маленькой оплошностью, как нибудь ее можно устранить? А если зажать кнопку прыжка, то оплошность с каждым последующим прыжком становится всё больше и больше.
zulec
UNец
 
Сообщения: 7
Зарегистрирован: 10 ноя 2018, 05:52

Re: Проблема с поворотом спрайта.

Сообщение 1max1 10 ноя 2018, 10:40

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

class XXX : MonoBehaviour
{
    const float speedRotation = 5.0f;

    Coroutine coroutine;

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            if (coroutine == null)
            {
                coroutine = StartCoroutine(c_Rotate());
            }    
        }
    }

    IEnumerator c_Rotate()
    {
        Quaternion r180 = transform.rotation * Quaternion.AngleAxis(180.0f, transform.forward);

        while (true)
        {
            transform.rotation = Quaternion.Lerp(transform.rotation, r180, speedRotation * Time.deltaTime);

            if (Quaternion.Angle(transform.rotation, r180) < 1.0f)
            {
                transform.rotation = r180;

                coroutine = null;

                yield break;
            }
            else
                yield return null;
        }
    }
}
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Проблема с поворотом спрайта.

Сообщение zulec 10 ноя 2018, 23:11

Спасибо! Теперь всё работает отлично!
zulec
UNец
 
Сообщения: 7
Зарегистрирован: 10 ноя 2018, 05:52


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

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

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