我正在尝试为您点击多维数据集时制作一个简单的缩放脚本。我希望它放大立方体,但我找不到让主摄像机变焦的方法。我尝试了几种不同的方法。这是当前的一个。我在OnMouseDown
中使用它,但它仍然不起作用,因此我将其移动到更新以查看是否可以使其工作。
void Update ()
{
if(Input.GetKeyDown("z"))
{
Debug.Log("Pressed Z");
zoomedIn = !zoomedIn;
}
if(zoomedIn == true)
{
Debug.Log("True!");
Camera.main.GetComponent<Camera>().fieldOfView = Mathf.Lerp(GetComponent<Camera>().fieldOfView, zoom, Time.deltaTime*smooth);
}
else
{
Camera.main.GetComponent<Camera>().fieldOfView = Mathf.Lerp(GetComponent<Camera>().fieldOfView, normal, Time.deltaTime*smooth);
}
}
答案 0 :(得分:0)
看起来zoom
和normal
未分配给正确的值。另外,请确保您在Perspective
,而不是Orthographic
查看。
如果您想使用
Orthographic
视图,只需将fieldOfView
的所有用法更改为orthographicSize
,然后将zoom
更改为合理的内容,例如5个单位。
normal
应该是fieldOfView
中检索到的相机的初始Start
:
// camera is a private field
private Camera camera;
camera = GetComponent<Camera>();
normal = camera.fieldOfView;
zoom
应该是 less 的值,而不是normal
(初始fieldOfView
)从检查员分配的能够“放大”。
您的条件分支将更改为
if (zoomedIn) // Same as if (zoomedIn == true)
{
camera.fieldOfView = Mathf.Lerp(camera.fieldOfView, zoom, Time.deltaTime * smooth);
}
else
{
camera.fieldOfView = Mathf.Lerp(camera.fieldOfView, normal, Time.deltaTime * smooth);
}
或者,更简洁的版本:
camera.fieldOfView = Mathf.Lerp(camera.fieldOfView, zoomedIn ? zoom : normal, Time.deltaTime * smooth);
我还建议使用Coroutine来执行此操作,而不是在Update
中执行此操作。