我有阻挡玩家在场景中移动的墙壁。我想在路径空闲时拖动播放器,在播放器撞到墙壁时禁用播放器。我可以使用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;
}
}
此外,当玩家与墙壁碰撞时,我不需要不稳定的运动。 您的经验中的任何评论都是有益的。
答案 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;
}
}