如何启用和禁用鼠标拖动以避免使用c#在统一3d中进行碰撞

时间:2015-05-28 14:53:48

标签: c# unity3d

我有阻挡玩家在场景中移动的墙壁。我想在路径空闲时拖动播放器,在播放器撞到墙壁时禁用播放器。我可以使用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;
    }
}

此外,当玩家与墙壁碰撞时,我不需要不稳定的运动。 您的经验中的任何评论都是有益的。

2 个答案:

答案 0 :(得分:0)

为什么不改变逻辑。听起来你想要一个恒定的阻力,除非与墙碰撞。所以你可以在这种情况下说:

伪:

在更新()

If (not colliding with walls) 
    DragObject()

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

答案 1 :(得分: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;
  }
}