C# Mathf.SmoothDamp立即发生(Unity 3d)

C# Mathf.SmoothDamp立即发生(Unity 3d),c#,unity3d,C#,Unity3d,因此,我有两个功能用于缩小枪,一个用于缩小枪 当播放机速度达到某个数字以及放大时,将在Update()中调用缩小 以下是功能: void MakeGunFurther() { float refVel = 0; float normalFOV = gunCam.fieldOfView; gunCam.fieldOfView = Mathf.SmoothDamp(normalFOV, 55f, ref refTest, 0.1f);

因此,我有两个功能用于缩小枪,一个用于缩小枪

当播放机速度达到某个数字以及放大时,将在Update()中调用缩小

以下是功能:

    void MakeGunFurther()
    {
        float refVel = 0;
        float normalFOV = gunCam.fieldOfView; 
        gunCam.fieldOfView = Mathf.SmoothDamp(normalFOV, 55f, ref refTest, 0.1f);
        
    }
    void MakeGunCloser()
    {
        
        float refVel = 0;
        gunCam.fieldOfView = Mathf.SmoothDamp(47, 55, ref refTest, 0.1f);
        hasRan = false;

    }

现在,我的问题是,第一个功能运行良好,使枪顺利缩小,但当我需要用第二个功能再次放大时,它会立即使枪无法像第一个一样顺利缩小。 请帮忙。
谢谢

还没有机会在Unity中使用,但我知道问题可能发生在哪里

首先,您可能需要考虑在单脚本的类级别范围内查看视图的上下点。甚至可以序列化它,以便您可以在播放模式下使用它

public float normalFieldOfView = 55f;
public float zoomedInFieldOfView = 47f; //If I got that correct from the script
您还需要在方法外部的ref参数中跟踪Mathf.SmoothDamp的速度。每次您完成放大和缩小时(没有足够的信息给您提供建议),这可能会重置为某个值(可能为0f)

其次,您可能希望重新编写函数

void MakeGunFurther()
{
    gunCam.fieldOfView = Mathf.SmoothDamp(gunCam.fieldOfView, normalFieldOfView, ref currentZoomVelocity, 0.1f);    
}

void MakeGunCloser()
{
    gunCam.fieldOfView = Mathf.SmoothDamp(gunCam.fieldOfView, zoomedInFieldOfView, ref currentZoomVelocity, 0.1f);
    hasRan = false;
}

但同样,您必须确保在每次完成放大和缩小时正确重置当前Zoomvelocity。

MakeGun是否会进一步使目标变为~55f?如果是这样的话,那我们为什么要从47开始呢。gunCam中的前两个参数似乎有些奇怪。MakeGunCloser的fieldOfView也对此感到疑惑。还建议将normalFOV声明出该空白,或者至少在MakeGunCloser和MakeGunFurther中使用它。可能是误解了正常FOV,可能是类似currentFOV的东西。@OmarAbdelBari是的,我只是把它们调换了一下,因为出于某种原因,当它们处于正确的顺序时,它一点也没有改变任何东西;ll所以这就是目标和电流切换的原因。@Karim.k当前编码为
gunCam.fieldOfView=Mathf.SmoothDamp(55,47,ref-refTest,0.1f)
gunCam.fieldOfView=Mathf.SmoothDamp(55f,47f,参考测试,0.1f)
可能是数据类型问题。@OstenGibson我尝试添加“f”,但遗憾的是仍然是一样的:(我按照你说的做了,但是我不知道在哪里或者如何重置当前的ZoomVelocity。你能告诉我我应该在哪里重置它吗?谢谢你如果你需要任何额外的信息告诉我更新:我知道如何重置它,所以它总是0,但在那之后它仍然不能顺利地缩小。奇怪的错误:0你能澄清什么不适合zoo吗我顺利退出意味着什么?大家好,我在这里找到了这个问题的答案:(我在这里和这个链接上问了这个问题)希望这对将来的任何人都有帮助!(同时我也被禁止发布答案,这就是为什么我在评论中发布的原因)
void MakeGunFurther()
{
    gunCam.fieldOfView = Mathf.SmoothDamp(gunCam.fieldOfView, normalFieldOfView, ref currentZoomVelocity, 0.1f);    
}

void MakeGunCloser()
{
    gunCam.fieldOfView = Mathf.SmoothDamp(gunCam.fieldOfView, zoomedInFieldOfView, ref currentZoomVelocity, 0.1f);
    hasRan = false;
}