Есть приблизительно вот такая конструкция турели.
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);
}
Все работает корректно, каждый обьект наводится на цель.
А вопрос, собственно, вот в чем...
Из-за того, что пушка расположена в стороне от осей вращения, она смотрит не на крестик, а чуть в сторону.
Как узнать, на сколько скорректировать вращение самой пушки, что бы она смотрела на крестик?
Или может есть более простые способы наведения на цель...