Есть скрипт по повороту камеры:
public Transform target;
void Update()
{
float rot_speed = 3f; //коэфицент скорости вращения, чувствительность мыши
Vector3 delta = new Vector3(-Input.GetAxis("Mouse Y") * rot_speed, Input.GetAxis("Mouse X") * rot_speed, 0f);
transform.rotation = Quaternion.Euler(transform.rotation.eulerAngles + delta);
transform.position = target.position - (transform.forward) + (transform.up);
}
и скрипт для управления персонажем через charter controller:
private float speed;
public float graviti;
public float jumpPower;
public float normalSpeed;
public float rotateSpeed;
public Transform head;
private CharacterController ch_controller;
private Vector2 input_normalized;
private Vector3 velocity;
private float force_down;
void Start()
{
ch_controller = GetComponent<CharacterController>();
}
void Update()
{
Move();
}
private void Move()
{
input_normalized.y = Input.GetAxis("Vertical");
input_normalized.x = Input.GetAxis("Vertical");
if (!Input.GetKey(KeyCode.W) && !Input.GetKey(KeyCode.S))
{
input_normalized.y = 0;
}
if (!Input.GetKey(KeyCode.D) && !Input.GetKey(KeyCode.A))
{
input_normalized.x = 0;
}
if (Input.GetKeyDown(KeyCode.Space) && ch_controller.isGrounded)
{
force_down = jumpPower;
}
if (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl))
{
speed = normalSpeed * 2f;
}
else
{
speed = normalSpeed;
}
if (ch_controller.isGrounded && force_down > 0)
{
force_down = jumpPower;
}
else
{
force_down -= graviti * Time.deltaTime;
}
velocity = ((transform.forward * input_normalized.y + transform.right * input_normalized.x + head.transform.up * force_down) * speed + Vector3.down * force_down) * Time.deltaTime;
ch_controller.Move(velocity);
}
Обьект с этим классом - родительский. А тот который с поворотом камеры - дочерний.
Но получается что от наклона x оси камеры зависит передвижение.
Вот подробно видео с багом -
https://skr.sh/v8DyfGirJwm?a