Для настройки управления игровым персонажем с использованием джойстика и CharacterController вы можете изменить скрипт PlayerMovement следующим образом:
1. Удалите компоненты Rigidbody и Collider с игрока, поскольку они больше не понадобятся.
2. Добавьте компонент CharacterController к игроку. Этот компонент будет отвечать за обработку коллизий и перемещение игрока.
3. В скрипте PlayerMovement замените все обращения к Rigidbody на обращения к CharacterController. Например, замените rigidbody.velocity на characterController.Move.
Примерно так может выглядеть скрипт PlayerMovement:
```csharp
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float speed = 5f;
private CharacterController characterController;
private void Start()
{
characterController = GetComponent<CharacterController>();
}
private void Update()
{
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
Vector3 direction = new Vector3(horizontal, 0f, vertical);
direction.Normalize();
if (direction.magnitude >= 0.1f)
{
float targetAngle = Mathf.Atan2(direction.x, direction.z) * Mathf.Rad2Deg + Camera.main.transform.eulerAngles.y;
Vector3 moveDirection = Quaternion.Euler(0f, targetAngle, 0f) * Vector3.forward;
characterController.Move(moveDirection.normalized * speed * Time.deltaTime);
}
}
}
```
4. При управлении игроком относительно взгляда камеры вы можете вращать персонажа только по горизонтальной плоскости. Для этого добавьте код вращения персонажа в скрипт PlayerLock, который должен быть прикреплен к камере. Примерно так:
```csharp
using UnityEngine;
public class PlayerLock : MonoBehaviour
{
private void Update()
{
float mouseX = Input.GetAxis("Mouse X");
transform.rotation *= Quaternion.Euler(0f, mouseX, 0f);
}
}
```
Таким образом, персонаж будет двигаться в текущем направлении взгляда камеры при использовании джойстика, причем из-за использования CharacterController он не застревает в объектах, так как этот компонент автоматически обрабатывает коллизии и физику перемещения.