Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何用c语言实现三维摄像机的变焦#_C#_Unity3d_3d_Camera_Zooming - Fatal编程技术网

C# 如何用c语言实现三维摄像机的变焦#

C# 如何用c语言实现三维摄像机的变焦#,c#,unity3d,3d,camera,zooming,C#,Unity3d,3d,Camera,Zooming,所以基本上我写了这段代码: int zoom = 20; int normal = 31; float smooth = 5; private bool isZoomed = false; private bool notZoomed = false; void Update() { if (Input.GetKeyDown(KeyCode.LeftShift)) { isZoomed = !isZoomed; } if (isZoomed

所以基本上我写了这段代码:

int zoom = 20;
int normal = 31;
float smooth = 5;

private bool isZoomed = false;
private bool notZoomed = false;

void Update()
{

    if (Input.GetKeyDown(KeyCode.LeftShift))
    {
        isZoomed = !isZoomed;
    }

    if (isZoomed)
    {
        GetComponent<Camera>().fieldOfView = Mathf.Lerp(GetComponent<Camera>().fieldOfView, zoom, Time.deltaTime * smooth);
    }

    if (Input.GetKeyUp(KeyCode.LeftShift))
    {
        notZoomed = !notZoomed;
    }

    if (notZoomed)
    {
        GetComponent<Camera>().fieldOfView = Mathf.Lerp(GetComponent<Camera>().fieldOfView, normal, Time.deltaTime * smooth);
    }
}
int zoom=20;
正常积分=31;
浮动平滑=5;
private bool isZoomed=假;
private bool notZoomed=假;
无效更新()
{
if(Input.GetKeyDown(KeyCode.LeftShift))
{
IsZomed=!IsZomed;
}
如果(放大)
{
GetComponent().fieldOfView=Mathf.Lerp(GetComponent().fieldOfView,zoom,Time.deltaTime*平滑);
}
if(Input.GetKeyUp(KeyCode.LeftShift))
{
未缩放=!未缩放;
}
如果(未缩放)
{
GetComponent().fieldOfView=Mathf.Lerp(GetComponent().fieldOfView,normal,Time.deltaTime*平滑);
}
}
这是为了平滑缩放,但效果不太好,充满了错误ecc。。
我想做一个类似的“minecraft Optifine Zoom”(基本上当我按住shift键时,它会变焦,如果我真的将它移回正常的摄像机视野),请有人修复我的代码或给我发送另一个代码?请告诉我我真的需要它。感谢首先,您只需要为if语句使用一个bool值,然后就可以在单个boolean上使用if-else。目前,他们正在新闻发布会和新闻发布会上切换两个不同的布尔值,但都不是同时切换的

另一个问题是lerp的使用,特别是最后一个参数。基本上,您将永远无法达到目标缩放视野,因为您的计算永远不会导致1

为了顺利过渡,您应该存储一个浮点值作为lerp值

float lerp = 0f;
void Update()
{

if (Input.GetKeyDown(KeyCode.LeftShift))
{
    isZoomed = !isZoomed;
}

if (isZoomed)
{
    lerp = Mathf.Max( Time.deltaTime * smooth + lerp, 1f);
    GetComponent<Camera>().fieldOfView = Mathf.Lerp(normal, zoom, lerp);
} else {
    lerp = Mathf.Min( Time.deltaTime * smooth - lerp 1f);
   GetComponent<Camera>().fieldOfView = Mathf.Lerp(normal, zoom, lerp);
}

if (Input.GetKeyUp(KeyCode.LeftShift))
{
    isZoomed = !isZoomed;
}
float-lerp=0f;
无效更新()
{
if(Input.GetKeyDown(KeyCode.LeftShift))
{
IsZomed=!IsZomed;
}
如果(放大)
{
lerp=Mathf.Max(Time.deltaTime*平滑+lerp,1f);
GetComponent().fieldOfView=Mathf.Lerp(正常、缩放、Lerp);
}否则{
lerp=Mathf.Min(Time.deltaTime*平滑-lerp 1f);
GetComponent().fieldOfView=Mathf.Lerp(正常、缩放、Lerp);
}
if(Input.GetKeyUp(KeyCode.LeftShift))
{
IsZomed=!IsZomed;
}

}

不,我们无法修复您的代码。您需要告诉我们错误是什么。“到处都是虫子”并没有真正的帮助。你调试过了吗?