c# - 单独的平滑进出缩放

标签 c# unity3d

我只在 unity 中工作了几天,遇到以下问题,我不知道如何使放大和缩小平滑,而其余部分也不能平滑运行。尽管如此,我还是想保留我可以决定其余部分是否顺利的功能。如前所述,主要问题是我不知道如何平滑放大和缩小。当我用我当前的代码启动项目时,感觉我的鼠标的 dpi 相当高。还有,每一个 Action 都很流畅,这也是我不想要的。我会很乐意提供帮助。

维斯 :)

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 的 float 版本:Mathf.SmoothDamp .

使用它为 dstFromTarget 找到一个平滑的目标。将 zoomSmoothVelocity 更改为 float 并将当前缩放变量初始化为与初始化 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;
}

关于c# - 单独的平滑进出缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57015495/

相关文章:

c# - 如果指定的子值为 NULL,则显示父值

C# 为什么我不应该使用协程?

c# - GameObject.FindGameObjectsWithTag() 不工作

c# - 在 Unity C# 中将对象缓慢移动到新位置

xcode - 在Build上崩溃

c# - 最后用缓动来回摇动一个物体?

c# - 使用 Selenium C# 的表中的行数

c# - 我可以在加载 XDocument 时使用预定义的命名空间吗?

c# - Xamarin.Forms 字体已过时

c# - 包含超过 100 个项目的列表框崩溃