C# 如何防止播放器将图像拖到指定区域之外?
我试图在某个区域拖动图像。为此,我使用IDragHandler。为了防止图像超出该区域,我将四个长方体碰撞器设置为方形。箱子还在向外移动。因此,我将固定时间步长设置为0.0001。现在,当图像超出边界时,它将图像推回指定区域,这很好,但我希望图像在接触到图像边缘时停止移出边界。 这是我的密码:C# 如何防止播放器将图像拖到指定区域之外?,c#,unity3d,C#,Unity3d,我试图在某个区域拖动图像。为此,我使用IDragHandler。为了防止图像超出该区域,我将四个长方体碰撞器设置为方形。箱子还在向外移动。因此,我将固定时间步长设置为0.0001。现在,当图像超出边界时,它将图像推回指定区域,这很好,但我希望图像在接触到图像边缘时停止移出边界。 这是我的密码: public class Draggable : MonoBehaviour, IDragHandler { public GameObject box; private void On
public class Draggable : MonoBehaviour, IDragHandler
{
public GameObject box;
private void OnCollisionEnter2D(Collision2D collision)
{
Debug.Log("Triggered");
}
public void OnDrag(PointerEventData eventData)
{
box.transform.position = eventData.position;
}
}
不要用物理和固定时间步来解决这个问题。减少时间步长是性能杀手 一种方法是:使用Physics.OverlapBox(参见文档)
在可拖动对象和OnDrag方法中可拖动区域的限制之间执行此测试。根据您收到的事件计算“想要的”位置,如果您的对象与边界重叠,则不要移动它,如果您的对象不安全,则可以移动它。尝试以简单的数字实现边界序列。也许可以创建一个矩形并取其角。然后,通过使用min和max函数,在实际设置允许的坐标之前有效地“钳制”它们,您可以获得最佳的用户体验。
分别夹紧x和y是有意义的。这样,即使鼠标在X轴的边界之外,如果有空间,用户仍然可以沿Y轴拖动。请向我们显示您的代码。您是否尝试使用
Mathf.Clamp()
?请向我们显示您尝试的完整代码。。。我看不出有什么退让…谢谢你的回答,弗拉维安·马里亚纳奇。您是对的,fixed timestep不是解决此问题的正确方法,它会降低性能。我试过这个盒子,它对我有效。谢谢,谢谢你的回复。用什么创建矩形?你能出示密码吗。