Корректировка вращения

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

Корректировка вращения

Сообщение EagleOwle 19 апр 2017, 10:42

Приветствую.
Есть приблизительно вот такая конструкция турели.
https://drive.google.com/file/d/0B0ZlcJ ... sp=sharing
Турель состоит из 3-ех обьектов.
Первый обьект вращается только по оси Y, второй только по оси X. Третий, это пушка. Она не вращается вообще.
Обьекты дочерние друг за дружкой.
Задача, повернуть турель так, что бы пушка смотрела на крестик.

Класс, который обрабатывает вращение
Синтаксис:
Используется csharp

void LateUpdate()
    {
        if (ModulStatus == ModulStatus.On)
        {
            transformRotationX.localEulerAngles = RotationAxisX(transformRotationX);
            transformRotationY.localEulerAngles = RotationAxisY(transformRotationY);
        }

private Vector3 RotationAxisY(Transform rotateTransform)
    {
        rotateTransform.rotation = Quaternion.RotateTowards(rotateTransform.rotation, GetDirection(rotateTransform), SpeedRotation());

         tempAngle = 0;

        tempAngle = rotateTransform.localEulerAngles.y;

        if (rotateTransform.localEulerAngles.y > 180f)
        {
            //если значение Y больше 180, то используем ограничение между 360 и максимальным ограничением
            tempAngle = Mathf.Clamp(tempAngle, 360f - modulConfig.rangeAngleGun, 360f);
        }
        else
        {
            if (transformRotationY.localEulerAngles.y < 180f)
            {
                //если значение Y меньше 180, то ограничение используем между 0 и минимальным ограничением
                tempAngle = Mathf.Clamp(tempAngle, 0f, modulConfig.rangeAngleGun);
            }
        }

        return new Vector3(0, tempAngle, 0);
    }

    private Vector3 RotationAxisX(Transform rotateTransform)
    {
        rotateTransform.rotation = Quaternion.RotateTowards(rotateTransform.rotation, GetDirection(rotateTransform), SpeedRotation());

         tempAngle = 0;

        tempAngle = rotateTransform.localEulerAngles.x;

        if (rotateTransform.localEulerAngles.x > 180f)
        {
             tempAngle = Mathf.Clamp(tempAngle, 360f - modulConfig.rangeAngleGun, 360f);
        }
        else
        {
            if (rotateTransform.localEulerAngles.x < 180f)
            {
                tempAngle = Mathf.Clamp(tempAngle, 0f, modulConfig.rangeAngleGun);
            }
        }

        return new Vector3(tempAngle, 0, 0);
    }

    }

private Quaternion GetDirection(Transform tempTransform)
    {
        //вектор, куда нужно вращать башню
        return Quaternion.LookRotation(gunTarget - tempTransform.position);
    }

 

Все работает корректно, каждый обьект наводится на цель.
А вопрос, собственно, вот в чем...
Из-за того, что пушка расположена в стороне от осей вращения, она смотрит не на крестик, а чуть в сторону.
Как узнать, на сколько скорректировать вращение самой пушки, что бы она смотрела на крестик?

Или может есть более простые способы наведения на цель...
EagleOwle
UNIверсал
 
Сообщения: 493
Зарегистрирован: 02 янв 2015, 16:27

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

Сообщение siriusspark 19 апр 2017, 18:52

Как то громоздко у вас все реализовано...

Собственно вопрос - а почему нельзя ввести коррекцию пушки, чтобы она тоже находилась по нужному вектору?
Star Wars: Path of lust. 3D-адвенчур 18+ по мотивам Звездных войн | _www.patreon.com/starlordgames
Аватара пользователя
siriusspark
UNIт
 
Сообщения: 106
Зарегистрирован: 10 сен 2015, 09:14

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

Сообщение EagleOwle 19 апр 2017, 19:07

Такое расположение обусловлено конструкцией(мешем).
Я просто не шарю в геометрии.
Логика подсказываете, что нужно вычислить, насколько повернуть пушку, зная расстояние между ней и соседним шарниром.
EagleOwle
UNIверсал
 
Сообщения: 493
Зарегистрирован: 02 янв 2015, 16:27

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

Сообщение siriusspark 19 апр 2017, 19:17

Нет, я имел ввиду что саму пушку можно тоже слегка подкручивать.
Star Wars: Path of lust. 3D-адвенчур 18+ по мотивам Звездных войн | _www.patreon.com/starlordgames
Аватара пользователя
siriusspark
UNIт
 
Сообщения: 106
Зарегистрирован: 10 сен 2015, 09:14


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

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

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