聚焦于特定点的正交相机变焦

Ale*_*lex 6 orthographic unity-game-engine

我有一个正交相机,想实现一个特定点的缩放功能。即,假设您有一张图片并且想要缩放到图片的特定部分。

我知道如何放大,问题是将相机移动到具有所需焦点区域的位置。

我怎么能这样做?

Ric*_*ard 0

相机的orthographicSize数量是视口上半部分的世界空间单位数。如果它是 0.5,那么 1 单位的立方体将恰好填充视口(垂直)。

因此,要放大目标区域,请将相机置于其中心(通过将 (x,y) 设置为目标中心)并设置orthographicSize为区域高度的一半。

以下是居中并缩放到对象范围的示例。(使用 LMB 进行缩放;按“R”进行重置。)

public class OrthographicZoom : MonoBehaviour
{
    private Vector3 defaultCenter;
    private float defaultHeight; // height of orthographic viewport in world units

    private void Start()
    {
        defaultCenter = camera.transform.position;
        defaultHeight = 2f*camera.orthographicSize;
    }

    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Collider target = GetTarget();
            if(target != null)
                OrthoZoom(target.bounds.center, target.bounds.size.y); // Could directly set orthographicSize = bounds.extents.y
        }

        if (Input.GetKeyDown(KeyCode.R))
            OrthoZoom(defaultCenter, defaultHeight);
    }


    private void OrthoZoom(Vector2 center, float regionHeight)
    {
        camera.transform.position = new Vector3(center.x, center.y, defaultCenter.z);
        camera.orthographicSize = regionHeight/2f;
    }


    private Collider GetTarget()
    {
        var hit = new RaycastHit();
        Physics.Raycast(camera.ScreenPointToRay(Input.mousePosition), out hit);
        return hit.collider;
    }
}
Run Code Online (Sandbox Code Playgroud)