Ну
var md = new Vector2 (Input.GetAxisRaw ("Mouse X"), Input.GetAxisRaw ("Mouse Y")); //mouse movement
даже комментируется mouse movement
. Как обычно, лучшее имя переменной уже объясняет это. Было бы лучше назвать mouseDelta
. Таким образом, код использует не фиксированную позицию мыши, а перемещенную точку с последнего кадра. (См. Input.GetRawAxis )
Тогда
md = Vector2.Scale (md, new Vector2 (sensitivity * smoothing, sensitivity * smoothing));
Vector2.Scale
увеличивает или уменьшает этот вектор. Вы также можете написать это как
md = new Vector2 (md.x * sensitivity * smoothing, md.y * sensitivity * smoothing);
На самом деле это совершенно не нужно, потому что вы могли бы написать это проще, например так:
md *= sensitivity * smoothing;
Тогда Mathf.Lerp
- это линейная интерполяция между двумя заданными позициями с использованием определенного factor
между 0
и 1
, где 0
будет полностью первым параметром, 1
полностью вторым, в противном случае что-либо между ними. Например, коэффициент 0.5
приведет к центру между обоими значениями, поэтому это зависит от заданного вами значения для smoothing
smoothV.x = Mathf.Lerp (smoothV.x, md.x, 1f / smoothing);
smoothV.y = Mathf.Lerp (smoothV.y, md.y, 1f / smoothing);
Опять же, это пишется совершенно излишне, потому что лучше писать напрямую, используя Vector2.Lerp
smoothV = Vector2.Lerp(smoothV, md, 1f/smoothing);
Но на самом деле я не совсем уверен, что это даже то, что вы ожидаете, поскольку это не абсолютное значение, а то, что вы позже добавляете каждый кадр так что использование Lerp
для меня в любом случае не имеет особого смысла ... Я бы, вероятно, напрямую использовал Lerp
для перемещения текущего mouseLoock
к новому целевому значению.
Наконец вы делаете
mouseLook += smoothV;
if(mouseLook.y>-40 && mouseLook.y<60)
transform.localRotation = Quaternion.AngleAxis (-mouseLook.y, Vector3.right);
character.GetComponent<CharacterController>().transform.localRotation = Quaternion.AngleAxis (mouseLook.x, character.transform.up);
, который обновляет два вращения . В вашем коде нет ничего, присваивающего какую-либо новую позицию вообще ...
Кроме того, что использование по кадрам GetComponent
крайне неэффективно, вам лучше хранить эту ссылку один раз (например, в Start
) и использовать его позже.