如何使用C#在Unity 3D中启用或禁用鼠标拖动以避免碰撞

3

我在场景中设置了阻止玩家移动的墙壁。当路径畅通时,我希望能够拖动玩家,并在玩家撞到墙壁时禁用拖动。我可以使用mouseButtonDown()函数来实现启用和禁用,但这只有在鼠标按下时才有效。我不想这样。

if (Input.GetMouseButtonDown(0))
{
    if (enableDrag ==false)
        enableDrag = true;
}

OnMouseDrag()
{
    if(enableDrag== true)
    {
        ....
    }
}

.....

void OnCollisionEnter2D (Collision2D coll)
{
    if (coll.gameObject.tag == "Walls") 
    {
        enableDrag= false;
    }
}

此外,当玩家与墙壁碰撞时,我不希望玩家出现不稳定的运动。

如果您有经验,请提供意见和建议。


1
良好的格式化是你的朋友。请使用它。http://stackoverflow.com/help/formatting - Soner Gönül
你应该添加Unity3D标签。 - Catwood
感谢您的反馈。 - Tesfaye Asmera
我不确定你想如何启用拖动,但也许你想使用OnMouseOver()? - Uri Popov
基本上我正在寻找一种快速启用拖动的方法。在我的情况下,它取决于鼠标的输入。 - Tesfaye Asmera
2个回答

0
尽管回答有些晚了,但这就是我解决问题的方法。通过这种方法,只要玩家不与障碍物碰撞,你就可以持续地拖动玩家。
void OnMouseOver ()
    {

    Vector2 mousePos;

    Vector3 mousePosWorld = Camera.main.ScreenToWorldPoint (Input.mousePosition);
        mousePos.x = mousePosWorld.x;
        mousePos.y = mousePosWorld.y;
        this.transform.position = Vector3.MoveTowards (transform.position, new Vector3 (mousePosWorld.x, mousePosWorld.y, 0), speed * Time.deltaTime);



        if (enableDrag) {

            Vector3 cursorPoint = new Vector3 (Input.mousePosition.x, Input.mousePosition.y, 0);
            Vector3 cursorPosition = Camera.main.ScreenToWorldPoint (cursorPoint) + offset;
            transform.position = new Vector3 (cursorPosition.x, cursorPosition.y, 0);



        }


If void OnCollisionEnter2D (Collision2D coll)
{
 if (coll.gameObject.tag == "Obstacle") 
 {
     enableDrag= false;
  }
}

0
为什么不改变逻辑呢?听起来你想要一个恒定的拖动,除非与墙碰撞。那么在这种情况下,你可以这样说:
伪代码:
在您的Update()函数内:
If (not colliding with walls) 
    DragObject()

这将需要您知道何时不再发生碰撞。也许可以使用OnCollisionExit。


谢谢。这正是我要找的。除非发生碰撞,否则不断拖动。我已经做到了。根据我的逻辑,我必须按下按钮才能重新启用拖动。这意味着每次发生碰撞都需要按下鼠标来重新启用。我不想通过按下鼠标来启用拖动。 - Tesfaye Asmera
你能否改变你的逻辑,使其在没有按钮按下的情况下正常工作? - Eissa
你可以使用OnCollisionExit2D来将enabledrag设置为false,而不是使用按钮按下。 - Eissa
是的,我做了。由此,当玩家与墙碰撞时,移动不够平滑。此外,采用您的方法会导致玩家运动不稳定。 - Tesfaye Asmera
你能发布你的完整当前代码吗?不稳定性可以处理,但这取决于你目前的做法。 - Eissa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接