c# - Unity 2D Mouse Zoom,但放大到鼠标点的位置

标签 c# unity3d zooming mouse

编辑:我需要一个 2D 实现的答案,而不是 3D。所以“之前询问”问题对我的项目不起作用。

编辑:使用下面接受的答案,这是我的工作脚本。它有点偏离,因为 Vector3 的 0.1F 部分很难正确,但它可以工作。虽然 Time.deltaTime 不起作用。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraZoom : MonoBehaviour
{

private float zoom = 10;
Vector3 newPosition;

void Update()
{
    if (Input.GetAxis("Mouse ScrollWheel") > 0 && zoom > 9)
    {
        zoom -= 1;
        Camera.main.orthographicSize = zoom;
        newPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        transform.position = Vector3.Lerp(transform.position, newPosition, 0.1F);
    }

    if (Input.GetAxis("Mouse ScrollWheel") < 0 && zoom < 101)
    {
        zoom += 1;
        Camera.main.orthographicSize = zoom;
    }

}

}

原始问题:我有一个用于放大和缩小的基本脚本,但是当我使用鼠标滚轮放大时,我想放大到鼠标光标所在的位置。我想你可以在 Paradox Games(EU4 等)中看到类似的东西,你缩小,将鼠标悬停在屏幕左侧的一个国家上,然后放大,国家放大并居中。

这是我到目前为止的基本脚本,附在我的相机上,它只是直线放大和缩小。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraZoom : MonoBehaviour {

public float zoom = 10F;

void Update () {
    if (Input.GetAxis("Mouse ScrollWheel") > 0 && zoom > 9)
    {
        zoom -= 1;
    }

    if (Input.GetAxis("Mouse ScrollWheel") < 0 && zoom < 101)
    {
        zoom += 1;
    }

    GetComponent<Camera>().orthographicSize = zoom;

  }
}

最佳答案

我自己还没有尝试过,但我希望它能奏效。

Vector3 newPosition;
bool canZoom;
bool isMoving;

void Update () 
{
    if (Input.GetAxis("Mouse ScrollWheel") > 0 && zoom > 9)
    {
        zoom -= 1;
        canZoom = true;
    }

    if (Input.GetAxis("Mouse ScrollWheel") < 0 && zoom < 101)
    {
        zoom += 1;
        canZoom = true;
    }

     if (canZoom) 
     {
        isMoving = true;
        Camera.main.orthographicSize = zoom;
        newPosition = Camera.main.ScreenToWorldPoint (Input.mousePosition);
     }
     if (isMoving)
     {
        transform.position = Vector3.Lerp (transform.position,  newPosition, Time.deltaTime);
     }

     if(transform.position == newPosition)
     {
         isMoving = false;
     }

}

注意:如果你想让相机保持一定的相机高度,移动前调整newPosision的y值。

希望这对您有所帮助。

关于c# - Unity 2D Mouse Zoom,但放大到鼠标点的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47203687/

相关文章:

c# - SteamVR在统一使用FFMPEG录制时创建加载屏幕闪烁

c# - 如何使用自定义宽高比统一构建项目?

image - flutter 、滚动、捏合和缩放大图

c# - 如何根据异常进行有条件的 WaitAndRetry 或 WaitAndRetryForever?

c# - 在 ASP.NET 应用程序上以编程方式配置 Microsoft.IdentityModel 不起作用 - 被动重定向已启用但从未起作用

c# - 是否可以检查 channel 是否存在?

ios - 如何在 UIScrollView 中实现缩放图像?

c# - linq to dataset 相当于 SQL LIKE 子句

unity3d - 在 switch block 内返回会产生 "unreachable code"警告

objective-c - 未调用带有 touchesMoved 的 UIScrollView