Создание контроллера для игрока в Unity с использованием Rigidbody — это достаточно распространенная задача, и я могу помочь вам с необходимыми шагами. Чтобы реализовать движение игрока относительно его направления, а не направления камеры, можно последовательно выполнить следующие шаги.
### Шаг 1: Настройка Rigidbody
1. Создайте пустой объект `Player`, добавьте к нему компонент `Rigidbody`.
2. Убедитесь, что "Is Kinematic" отключен, чтобы физика могла работать с объектом.
3. Настройте параметры Rigidbody, такие как "Drag" и "Mass", чтобы они подходили для вашей игры.
### Шаг 2: Создайте скрипт для контроллера
Создайте новый скрипт, например `PlayerController`, и подключите его к объекту игрока.
```csharp
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public float speed = 5f; // Скорость движения
public float turnSpeed = 700f; // Скорость поворота
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
// Получение входных данных
float moveHorizontal = Input.GetAxis("Horizontal"); // Движение влево-вправо
float moveVertical = Input.GetAxis("Vertical"); // Движение вперед-назад
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical).normalized;
// Если есть входные данные, то вращаем игрока
if (movement.magnitude > 0)
{
Quaternion rotation = Quaternion.LookRotation(movement); // Угол поворота в направлении движения
transform.rotation = Quaternion.RotateTowards(transform.rotation, rotation, turnSpeed * Time.deltaTime);
}
// Движение вперед по направлению к движению игрока
Vector3 forwardMovement = transform.forward * moveVertical * speed * Time.deltaTime;
Vector3 rightMovement = transform.right * moveHorizontal * speed * Time.deltaTime;
// Применяем движение к Rigidbody
rb.MovePosition(rb.position + forwardMovement + rightMovement);
}
}
```
### Шаг 3: Настройка камеры
Чтобы камера следовала за игроком, создайте пустой объект `Camera` как дочерний объект `Player`. Вы можете настроить позицию и вращение камеры в инспекторе так, чтобы она всегда смотрела на игрока.
### Пояснения к коду
1. **Ввод данных:** Мы используем `Input.GetAxis()` для получения значений от WASD или стрелок.
2. **Вращение:** Если есть движение, вычисляем новый угол и поворачиваем игрока к этому углу.
3. **Движение:** Двигаем игрока вперед в направлении его `transform.forward`, что позволяет избежать влияния вращения камеры на движение.
4. **Rigidbody:** Используем функцию `MovePosition()`, чтобы обеспечить плавное движение, соответствующее физике Unity.
### Шаг 4: Тестирование
1. Запустите игру и проверьте, работает ли контроллер как задумано.
2. Настройте параметры скорости и поворота в инспекторе, чтобы добиться нужного вам поведения.
Таким образом, вы создадите базовый контроллер для игрока, который будет двигаться в своем направлении независимо от ориентации камеры.