如何使用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;
}
}
我也不需要玩家不稳定的运动,当它与墙碰撞。你的经验之谈对我很有帮助。
你为什么不改变一下逻辑呢?听起来你想要恒定的阻力,除非撞到墙上。在这种情况下,你可以输入:
伪:在你的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;
}
}