unity3d - 将相机拖动到极限(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 相关的新位置之间的变化,然后相机相应地移动。我只想定义一个相机不能超过的最大值。任何想法如何做到这一点。不幸的是,我仍在学习——对我来说有点难,我希望能得到帮助。
解决方案
如果您要在变量中记录相机的 X 和 Y 位置并使用 MathF 函数。IE
如果你有一张 100(x)x150(y) 单位的地图,你可以使用
xPositionOfCamera = Mathf.Clamp(xPositionOfCamera, -50, 50);
yPositionOfCamera = Mathf.Clamp(YPositionOfCamera, -75, 75);
我不是 100% 确定这是否是你想要它做的,但这就是我会限制它的方式。
推荐阅读
- java - 如何将手机铃声重置为系统默认设置?
- istio - 上游连接错误或在标头之前断开/重置。重置原因:连接失败
- php - 为 WooCommerce 产品属性创建自定义按钮
- java - 如何将文件本身作为项目处理?
- ubuntu - 主管使用所有 cpu 电源
- reactjs - 为什么 useEffect 不直接支持异步回调或者清理函数有单独的参数?
- amazon-web-services - AWS Cognito 错误:没有为未经身份验证的访问提供 Cognito 身份池
- python - python中TCP套接字中两个客户端之间的简单数据传输
- linux - 如何加密已经安装的 Arch 系统?
- c - c语言中的文件读写