首页 > 解决方案 > 将相机拖动到极限(x,y轴) - UNITY

问题描述

我做了一个关于在 2D 或 3D 世界地图上进行相机拖动的教程。

代码正在运行。如下所示:

void Update_CameraDrag ()
{
    if( Input.GetMouseButtonUp(0) )
    {
        Debug.Log("Cancelling camera drag.");
        CancelUpdateFunc();
        return;
    }

    // Right now, all we need are camera controls

    Vector3 hitPos = MouseToGroundPlane(Input.mousePosition);
    //float maxWidth = 10;
    //if (hitPos.x > maxWidth)
    //{
    //    hitPos.x = maxWidth;
    //}
    Vector3 diff = lastMouseGroundPlanePosition - hitPos;

    Debug.Log(diff.x+ Space.World);

    Camera.main.transform.Translate (diff, Space.World);

    lastMouseGroundPlanePosition = hitPos = MouseToGroundPlane(Input.mousePosition);
}

现在我的问题是,您可以无限制地向任何方向拖动。我宁愿在 x 和 y 轴上定义边界之类的东西。基本上是相机的最大值。如果相机超过这些值,它们的位置值将被设置为给定的最大值。不幸的是,我不确定它是如何工作的,特别是因为教程将所有内容都设置为与 Space.World 相关的内容——我什至不确定那是什么。我的意思是我理解“差异”是当前位置和与 Space.World 相关的新位置之间的变化,然后相机相应地移动。我只想定义一个相机不能超过的最大值。任何想法如何做到这一点。不幸的是,我仍在学习——对我来说有点难,我希望能得到帮助。

标签: unity3dcameradrag

解决方案


如果您要在变量中记录相机的 X 和 Y 位置并使用 MathF 函数。IE

如果你有一张 100(x)x150(y) 单位的地图,你可以使用

xPositionOfCamera = Mathf.Clamp(xPositionOfCamera, -50, 50);
yPositionOfCamera = Mathf.Clamp(YPositionOfCamera, -75, 75);

我不是 100% 确定这是否是你想要它做的,但这就是我会限制它的方式。


推荐阅读