Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Камера и передвижение шара в Unity.

Коля Колесников Знаток (330), на голосовании 3 месяца назад
Я сделал передвижение шара вперёд через addforse и камеру которая поворачивает в сторону движения мяча, так вот я хочу сделать так чтобы мяч двигался относительно поворота камеры, например если она смотрит на -90 градусов то и шар будет двигаться в этом направлении.Получать наклоны камеры могу. Камера - если что Cinemashine FreeLook. Буду рад если поможете!
Голосование за лучший ответ
Бинарный Балагур Гений (84517) 4 месяца назад
Вот как можно реализовать движение шара относительно поворота камеры в Unity с помощью Cinemachine FreeLook:

## Получение поворота камеры

1. Получите ссылку на камеру Cinemachine FreeLook в скрипте шара:

```csharp
public CinemachineFreeLook cameraRig;
```

2. В методе Update() получайте поворот камеры:

```csharp
Vector3 cameraForward = cameraRig.transform.forward;
cameraForward.y = 0; // игнорируем вертикальный поворот
cameraForward.Normalize();
```

## Применение движения шара

1. В методе FixedUpdate() (для физики) применяйте силу в направлении поворота камеры:

```csharp
Vector3 forceDirection = cameraForward;
rb.AddForce(forceDirection * forceAmount, ForceMode.Force);
```

где `rb` - ссылка на Rigidbody шара, а `forceAmount` - сила движения.

2. Чтобы шар двигался только вперед относительно камеры, поворачивайте направление силы на угол поворота камеры вокруг вертикальной оси:

```csharp
Quaternion cameraYRotation = Quaternion.Euler(0, cameraRig.transform.eulerAngles.y, 0);
forceDirection = cameraYRotation * Vector3.forward;
```

Полный код может выглядеть так:

```csharp
public class BallController : MonoBehaviour
{
public CinemachineFreeLook cameraRig;
public Rigidbody rb;
public float forceAmount = 10f;

void FixedUpdate()
{
Vector3 cameraForward = cameraRig.transform.forward;
cameraForward.y = 0;
cameraForward.Normalize();

Quaternion cameraYRotation = Quaternion.Euler(0, cameraRig.transform.eulerAngles.y, 0);
Vector3 forceDirection = cameraYRotation * Vector3.forward;

rb.AddForce(forceDirection * forceAmount, ForceMode.Force);
}
}
```

Теперь шар будет двигаться вперед относительно поворота камеры Cinemachine FreeLook. Вы можете настроить силу движения через переменную `forceAmount`.

Ключевые моменты:
- Получаем направление взгляда камеры, игнорируя вертикальный поворот
- Поворачиваем направление силы на угол поворота камеры вокруг вертикальной оси
- Применяем силу в полученном направлении к Rigidbody шара в методе FixedUpdate()

[1] https://forum.unity.com/threads/moving-and-rotating-camera-around-the-ball.505015/
[2] https://www.youtube.com/watch?v=FsYI9D3aukY
[3] https://discussions.unity.com/t/how-to-make-the-camera-follow-and-face-a-rolling-object/248504
[4] https://stackoverflow.com/questions/62093586/having-a-camera-follow-a-ball-in-unity-without-having-the-camera-roll
[5] https://www.youtube.com/watch?v=fESM_UIg1rA
Коля КолесниковЗнаток (330) 1 месяц назад
Спасибо!
Похожие вопросы