mouseLook
всегда 0, 0
в первом кадре. Итак, когда вы делаете
mouseLook += smoothV;
В первый раз у вас всегда есть значение, начинающееся с zero
вектора.
Вы должны сохранить начальное вращение (и, между прочим, также mainCamera, чтобы избежать его получения через Camera.main
), например,
private Transform cameraTransform;
private void Start()
{
cameraTransform = Camera.main.transform;
mouseLook.y = MathfClamp(-cameraTransform.localRotation.x, -75, 50);
mouseLook.x = transform.localRotation.y;
}
Тогда в вашем smooth
расчете, поскольку оба компонента x
и y
равны для
md = Vector2.Scale(md, new Vector2(cameraSpeed * smooth, cameraSpeed * smooth));
Вы также можете использовать простое умножение float
, например
md *= cameraSpeed * smooth;
Тогда вместо Lerp
компонентов x
и y
по отдельности вы можете использовать
smoothV = Vector2.Lerp(smoothV, md, 1f / smooth);
Я бы порекомендовал для лучшего понимания использовать
[Range(0f, 1f)] public float smoothFactor = 0.5f;
и затем соответственно
md *= cameraSpeed / smoothFactor;
smoothV = Vector2.Lerp(smoothV, md, smoothFactor);