【问题标题】:Zoom to mouse position like 3ds Max in Unity3d像 Unity3d 中的 3ds Max 一样缩放到鼠标位置
【发布时间】:2017-03-25 23:17:53
【问题描述】:

我想要实现的是能够使用鼠标滚轮将相机缩放到鼠标所在的位置。把它想象成 3ds max 是如何做到这一点的。相机会放大到鼠标所在的位置,并且没有抖动或捕捉。

这是我当前的实现,但假设目标位于中心。如果我移动目标位置,相机会捕捉到该位置并基本上将其带到中心。

targetDist -= Input.GetAxis("Mouse ScrollWheel") * zoomSpeed * 0.5f * (isOrtho ? 15f : 1f);
targetDist = Mathf.Max(0.1f,targetDist);
distance = moveSmoothing * targetDist + (1-moveSmoothing )*distance;

transform.localRotation = Quaternion.Slerp( transform.localRotation, targetRot, rotateSmoothing * deltaTimeFactor );

target.position = Vector3.Lerp(target.position, targetLookAt, moveSmoothing * deltaTimeFactor);
distanceVec.z = distance;

transform.position = target.position - transform.rotation * distanceVec;

有什么想法吗?

【问题讨论】:

    标签: c# unity3d zooming


    【解决方案1】:

    所以我开始想办法。对于任何寻找这个的人。此脚本应用在相机上,并且在更新函数中。

    if (Input.GetAxis("Mouse ScrollWheel") != 0)
    {
        RaycastHit hit;
        Ray ray = this.transform.GetComponent<Camera>().ScreenPointToRay(Input.mousePosition);
        Vector3 desiredPosition;
    
        if (Physics.Raycast(ray , out hit))
        {
            desiredPosition = hit.point;
        }
        else
        {
            desiredPosition = transform.position;
        }
        float distance = Vector3.Distance(desiredPosition , transform.position);
        Vector3 direction = Vector3.Normalize( desiredPosition - transform.position) * (distance * Input.GetAxis("Mouse ScrollWheel"));
    
        transform.position += direction;
    }
    

    【讨论】:

    • 很高兴你解决了这个问题;请把你自己的答案设置为正确的答案,这是完全可以接受的,因为你自己解决了。
    • 非常感谢您提供此代码,它运行良好!非常干净和简单但非常有效的解决方案。
    猜你喜欢
    • 2020-05-28
    • 1970-01-01
    • 2013-03-26
    • 2015-04-20
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 2014-04-16
    • 2020-09-07
    相关资源
    最近更新 更多