c# - 像 Unity3d 中的 3ds Max 一样缩放到鼠标位置

标签 c# unity3d zooming

我想要实现的是能够使用鼠标滚轮将相机缩放到鼠标所在的位置。把它想象成 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;

有什么想法吗?

最佳答案

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

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;
}

关于c# - 像 Unity3d 中的 3ds Max 一样缩放到鼠标位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33433872/

相关文章:

c# - 用于登录 ASP.NET 网站的控制台应用程序

c# - 防止我的控制台应用程序在 .Net.Timer 启动后关闭

c# - 将 UI RectTransform 移动到世界位置

objective-c - 为 UIImagePickerController 裁剪设置最小缩放级别

C# 来自循环的匿名对象的匿名数组

c# - 调用虚拟方法而不是覆盖

c# - 具体来说,在 Unity 中, "where"是否真的等待返回?

javascript - 如何使页脚 <div> 相对于可缩放内容 <div>?

swift - 如何使用 Swift 将相机缩放级别设置为 0.5 倍?

c# - 发现 DotNet 无效证书