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

本文关键字:拖动 鼠标 碰撞 何使用 unity 3d 启用 | 更新日期: 2023-09-27 17:51:03

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

我也不需要玩家不稳定的运动,当它与墙碰撞。你的经验之谈对我很有帮助。

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

你为什么不改变一下逻辑呢?听起来你想要恒定的阻力,除非撞到墙上。在这种情况下,你可以输入:

伪:

在你的Update()中

If (not colliding with walls) 
    DragObject()

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

虽然现在回答太晚了,但我是这样解决这个问题的。使用这种方法,你可以持续拖动玩家,直到它不与障碍物碰撞。

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;
  }
}