Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何防止播放器将图像拖到指定区域之外?_C#_Unity3d - Fatal编程技术网

C# 如何防止播放器将图像拖到指定区域之外?

C# 如何防止播放器将图像拖到指定区域之外?,c#,unity3d,C#,Unity3d,我试图在某个区域拖动图像。为此,我使用IDragHandler。为了防止图像超出该区域,我将四个长方体碰撞器设置为方形。箱子还在向外移动。因此,我将固定时间步长设置为0.0001。现在,当图像超出边界时,它将图像推回指定区域,这很好,但我希望图像在接触到图像边缘时停止移出边界。 这是我的密码: public class Draggable : MonoBehaviour, IDragHandler { public GameObject box; private void On

我试图在某个区域拖动图像。为此,我使用IDragHandler。为了防止图像超出该区域,我将四个长方体碰撞器设置为方形。箱子还在向外移动。因此,我将固定时间步长设置为0.0001。现在,当图像超出边界时,它将图像推回指定区域,这很好,但我希望图像在接触到图像边缘时停止移出边界。 这是我的密码:

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不是解决此问题的正确方法,它会降低性能。我试过这个盒子,它对我有效。谢谢,谢谢你的回复。用什么创建矩形?你能出示密码吗。