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

Проблемы с вращением камеры по оси Y

Pro0st0_4elik Ученик (123), на голосовании 4 месяца назад
Возникла проблема с камерой персонажа на Unity 3d. Камера по оси X крутится нормально, а на оси Y крутится криво, косо и непонятно. Помогите пожалуйста, заранее спасибо
 using System.Collections; 
using System.Collections.Generic;
using UnityEngine;

public class Ash : MonoBehaviour
{
// Скорость персонажа
public float moveSpeed = 5.0f;
public float runSpeed = 10.0f;

// Сила прыжка
public float jumpForce = 100.0f;

// Вращение камеры
public float mouseSensitivity = 100.0f;

private Rigidbody rb;
private CapsuleCollider capsuleCollider;
private Camera mainCamera;

private void Start()
{
rb = GetComponent();
capsuleCollider = GetComponent();
mainCamera = Camera.main;

// Блокировка курсора
Cursor.lockState = CursorLockMode.Locked;
}

private void Update()
{
// Получение ввода
float horizontalInput = Input.GetAxisRaw("Horizontal");
float verticalInput = Input.GetAxisRaw("Vertical");
float mouseX = Input.GetAxis("Mouse X");
float mouseY = Input.GetAxis("Mouse Y");
bool isJumping = Input.GetButtonDown("Jump");

// Движение
Vector3 movementDirection = new Vector3(horizontalInput, 0, verticalInput);
movementDirection.Normalize();

float speed = moveSpeed;
if (Input.GetKey(KeyCode.LeftShift))
{
speed = runSpeed;
}

transform.Translate(movementDirection * speed * Time.deltaTime);

// Прыжок
if (isJumping)
{
rb.AddForce(Vector3.up * jumpForce);
}

// Вращение камеры
transform.Rotate(Vector3.up * mouseX * mouseSensitivity * Time.deltaTime);
transform.Rotate(Vector3.right * -mouseY * mouseSensitivity * Time.deltaTime);
}
}
Голосование за лучший ответ
Татьяна Просветленный (36374) 5 месяцев назад
В вашем коде есть проблема с вращением камеры по оси Y. Вращение происходит неправильно, потому что вы используете transform.Rotate для вращения камеры по оси Y, а также по оси X. Это может привести к неожиданным результатам, поскольку оба вращения происходят относительно центра камеры.
Вместо этого, вы можете использовать transform.RotateAround для вращения камеры вокруг центра камеры.
 private void Update() 
{
// ...

// Вращение камеры
transform.RotateAround(transform.position, Vector3.up, mouseX * mouseSensitivity * Time.deltaTime);
transform.RotateAround(transform.position, Vector3.right, -mouseY * mouseSensitivity * Time.deltaTime);
}
В этом коде transform.RotateAround используется для вращения камеры вокруг центра камеры (transform.position) по оси Y (Vector3.up) и X (Vector3.right). Это обеспечивает более корректное вращение камеры.
Похожие вопросы