我只在 Unity 中工作了几天,遇到了以下问题,我不知道如何使放大和缩小平滑,而其余部分也运行顺利。尽管如此,我想保留我可以决定其余部分是否可以流畅的功能。如前所述,主要问题是我不知道如何平滑放大和缩小。 当我使用当前代码启动项目时,感觉鼠标的 dpi 非常高。此外,每个动作都很顺利,我也不想。我会很高兴得到帮助。
瓦斯:)
if (thirdperson)
{
yaw += Input.GetAxis("Mouse X") * mouseSensitivity;
pitch -= Input.GetAxis("Mouse Y") * mouseSensitivity;
pitch = Mathf.Clamp(pitch, pitchMinMax.x, pitchMinMax.y);
// out
if (Input.GetAxis("Mouse ScrollWheel") < 0)
{
if (dstFromTarget < 12)
{
dstFromTarget++;
}
}
//in
if (Input.GetAxis("Mouse ScrollWheel") > 0)
{
if (dstFromTarget > 2)
{
dstFromTarget--;
}
}
currentRotation = Vector3.SmoothDamp(currentRotation, new Vector3(pitch, yaw), ref rotationSmoothVelocity, rotationSmoothTime);
transform.eulerAngles = currentRotation;
Vector3 test = Vector3.SmoothDamp(transform.position, target.position - transform.forward * dstFromTarget, ref zoomSmoothVelocity, zoomSmoothTime);
transform.position = new Vector3(test.x, test.y, test.z);
}
使用 Vector3.SmoothDamp
的浮点版本:Mathf.SmoothDamp
。
使用它来查找 dstFromTarget
的平滑目标。 将zoomSmoothVelocity
更改为浮点数,并将当前缩放变量初始化为与初始化dstFromTarget
相同的值。
然后,您可以将Vector3.SmoothDamp
的目标直接分配给摄像机的位置。
使用transform.eulerAngles = new Vector3(pitch.yaw);
绕过对Vector3.SmoothDamp
的第一次呼叫
我还建议使用Mathf.Clamp
将缩放保持在有效范围内。
总的来说,这可能看起来像这样:
private float zoomSmoothVelocity = 0f;
private float curZoom = 6f; // however dstFromTarget is initialized
// ...
if (thirdperson)
{
yaw += Input.GetAxis("Mouse X") * mouseSensitivity;
pitch -= Input.GetAxis("Mouse Y") * mouseSensitivity;
pitch = Mathf.Clamp(pitch, pitchMinMax.x, pitchMinMax.y);
// out
if (Input.GetAxis("Mouse ScrollWheel") < 0)
{
dstFromTarget++;
}
//in
if (Input.GetAxis("Mouse ScrollWheel") > 0)
{
dstFromTarget--;
}
dstFromTarget = Mathf.Clamp(dstFromTarget, 2f, 12f);
transform.eulerAngles = new Vector3(pitch, yaw);
curZoom = Mathf.SmoothDamp(curZoom , dstFromTarget, ref zoomVelocity , zoomSmoothTime);
transform.position = target.position - transform.forward * curZoom;
}