Дергается персонаж при движении камеры
Добавлено: 12 янв 2018, 00:55
Добрый день!
Подскажите, пожалуйста, как решить проблему дергания камеры.
Ситуация такая: Есть Player, который двигается через MovePosition(). Есть поворот персонаж через мышку, при зажатой правой клавиши. Так вот, проблема в том, что когда идешь вперед и при этом начинаешь поворачивать мышь, то начинается непонятное дергание и замедление персонажа.
Подскажите, пожалуйста, как решить проблему дергания камеры.
Ситуация такая: Есть Player, который двигается через MovePosition(). Есть поворот персонаж через мышку, при зажатой правой клавиши. Так вот, проблема в том, что когда идешь вперед и при этом начинаешь поворачивать мышь, то начинается непонятное дергание и замедление персонажа.
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
// Настройки персонажа
[Header("Настройки персонажа")]
public float playerSpeed;
private int runSpeed; //Множитель к скорости передвижения
// Настройки мыши
[Header("Настройки мыши")]
public float mouseSpeed; // Скорость вращения мыш
public float mouseTopLimit; // Верхний предел
public float mouseBottomLimit; // Нижний предел
// Переменныйе для хранения состояний ввода
private float horizontal;
private float vertical;
private float mouseX;
private float mouseY;
private Vector3 direction;
// Объекты
private Camera cam;
private GameObject player;
private Rigidbody rb;
public GameObject avatar;
// Use this for initialization
void Start()
{
// Присвоение объектов переменным
cam = FindObjectOfType<Camera>();
player = transform.gameObject;
rb = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
// Перед всеми действиями прочитаем ввод
mouseX = Input.GetAxis("Mouse X");
mouseY = Input.GetAxis("Mouse Y");
// Наклон камеры
if (Input.GetMouseButton(1))
{
cam.transform.RotateAround(player.transform.position, transform.right, -mouseY * mouseSpeed);
player.transform.Rotate(Vector3.up, mouseX * mouseSpeed);
rb.transform.Rotate(Vector3.up, mouseX * mouseSpeed);
//direction = mouseX * mouseSpeed * move;
}
}
private void FixedUpdate()
{
// Двигаем персонажа
horizontal = Input.GetAxis("Horizontal");
vertical = Input.GetAxis("Vertical");
//Vector3 move = Vector3.forward;
if (vertical != 0 || horizontal != 0)
{
runSpeed = 1;
if (Input.GetKey(KeyCode.LeftShift))
{
if (vertical > 0 && horizontal == 0)
{
runSpeed = 2;
}
else
{
runSpeed = 1;
}
}
rb.MovePosition(rb.transform.position + transform.forward * playerSpeed * Time.deltaTime * runSpeed * vertical + transform.right * playerSpeed * Time.deltaTime * horizontal);
}
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
// Настройки персонажа
[Header("Настройки персонажа")]
public float playerSpeed;
private int runSpeed; //Множитель к скорости передвижения
// Настройки мыши
[Header("Настройки мыши")]
public float mouseSpeed; // Скорость вращения мыш
public float mouseTopLimit; // Верхний предел
public float mouseBottomLimit; // Нижний предел
// Переменныйе для хранения состояний ввода
private float horizontal;
private float vertical;
private float mouseX;
private float mouseY;
private Vector3 direction;
// Объекты
private Camera cam;
private GameObject player;
private Rigidbody rb;
public GameObject avatar;
// Use this for initialization
void Start()
{
// Присвоение объектов переменным
cam = FindObjectOfType<Camera>();
player = transform.gameObject;
rb = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
// Перед всеми действиями прочитаем ввод
mouseX = Input.GetAxis("Mouse X");
mouseY = Input.GetAxis("Mouse Y");
// Наклон камеры
if (Input.GetMouseButton(1))
{
cam.transform.RotateAround(player.transform.position, transform.right, -mouseY * mouseSpeed);
player.transform.Rotate(Vector3.up, mouseX * mouseSpeed);
rb.transform.Rotate(Vector3.up, mouseX * mouseSpeed);
//direction = mouseX * mouseSpeed * move;
}
}
private void FixedUpdate()
{
// Двигаем персонажа
horizontal = Input.GetAxis("Horizontal");
vertical = Input.GetAxis("Vertical");
//Vector3 move = Vector3.forward;
if (vertical != 0 || horizontal != 0)
{
runSpeed = 1;
if (Input.GetKey(KeyCode.LeftShift))
{
if (vertical > 0 && horizontal == 0)
{
runSpeed = 2;
}
else
{
runSpeed = 1;
}
}
rb.MovePosition(rb.transform.position + transform.forward * playerSpeed * Time.deltaTime * runSpeed * vertical + transform.right * playerSpeed * Time.deltaTime * horizontal);
}