Как можно ограничить вращение объекта по оси X в Unity, при этом сохраняя возможность движения по оси Y за другим объектом?

Как мне реализовать в проекте вращение дула от -26 до 44 градусов вокруг оси X и одновременно вращение за башней по оси Y? Требуется помощь!
  • 28 мая 2024 г. 11:11
Ответы на вопрос 1
Для ограничения вращения объекта по оси X в Unity можно использовать код следующим образом:

```csharp
public float maxXRotation = 44f;
public float minXRotation = -26f;

void Update()
{
    float rotationX = Input.GetAxis("Mouse Y");
    float currentRotationX = transform.eulerAngles.x;

    float newRotationX = currentRotationX - rotationX;

    newRotationX = Mathf.Clamp(newRotationX, minXRotation, maxXRotation);

    transform.eulerAngles = new Vector3(newRotationX, transform.eulerAngles.y, transform.eulerAngles.z);
}
```
 
Этот код ограничит вращение объекта по оси X в пределах от -26 до 44 градусов.

Чтобы реализовать вращение дула вокруг оси X и одновременно вращение за башней по оси Y, можно использовать два отдельных скрипта для управления вращением по каждой из осей. Например, скрипт для вращения дула по оси X может выглядеть следующим образом:

```csharp
public float maxXRotation = 44f;
public float minXRotation = -26f;

void Update()
{
    float rotationX = Input.GetAxis("Mouse Y");
    float currentRotationX = transform.eulerAngles.x;

    float newRotationX = currentRotationX - rotationX;

    newRotationX = Mathf.Clamp(newRotationX, minXRotation, maxXRotation);

    transform.eulerAngles = new Vector3(newRotationX, transform.eulerAngles.y, transform.eulerAngles.z);
}
```

А скрипт для вращения объекта за башней по оси Y может выглядеть примерно так:

```csharp
public float rotationSpeed = 5f;

void Update()
{
    float rotationY = Input.GetAxis("Mouse X");

    transform.Rotate(0, rotationY * rotationSpeed, 0);
}
```

Таким образом, оба скрипта позволят вращать объект по заданным осям с заданными ограничениями. Не забудьте присоединить оба скрипта к вашим объектам в Unity.
Похожие вопросы