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

标签 unity3d orthographic

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

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

我该怎么做?

最佳答案

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

因此,要放大您的目标区域,请将您的相机居中(通过将 (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;
    }
}

关于unity3d - 聚焦于特定点的正交相机变焦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18571760/

相关文章:

scripting - 我不知道如何解决的错误

c# - Unity3d 和 iPad 屏幕方向不一致,游戏不受设备旋转影响

java - OpenGL-ES 启用正交模式 2D

java - LibGDX 正交相机 : Make borders black instead of white (java)

unity3d - 如何在unity3d中改变 Canvas 的大小

android - 使用 Unity3d 访问 Android Activity 状态

ubuntu中的Unity3D场景空白

c - 从 glOrtho 切换到 gluPerspective

three.js - 正交相机和pickRay?

java - 如何根据我的平台确定正交相机的宽度和高度?