2014-05-18 3 views
2

Я использую событие OnMouseDrag для перемещения объекта. У меня проблема в том, что если кнопка мыши не будет выпущена, объект не будет падать. Я хочу, чтобы объект был удален, если перетащить его в определенное место на экране (2d). Таким образом, даже если кнопка мыши все еще опускает объект.Перемещение объекта выделения (drop)

Вот код, я использую:

void OnMouseDown() 
{ 
    screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position); 
    Debug.Log ("We clicked fire block!"); 
    offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, gameObject.transform.position.y, screenPoint.z)); 
} 

void OnMouseDrag() 
{ 
    Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, gameObject.transform.position.y, screenPoint.z); 

    if (curScreenPoint.x <= 1) { 
     return; 
      } 

    Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint)+offset; 

    transform.position = curPosition; 

    isDrag = true; 

} 
+0

Пожалуйста, прочтите метки перед их использованием. Тег единства полностью отличается от единицы 3d. –

ответ

2

я не понял одну вещь: это место является частью экрана или является 3D место в игре?

Проводка для обоих случаев:

1 - Место это 3D место в игре:

Использование Physics.Raycast внутри метода OnMouseDragUpdate, чтобы проверить, если курсор мыши бьет область он должен освободить (вам понадобится игровой объект с коллайдером, представляющим местоположение). Если да, просто сделайте isDrag = false.

Here's an example как сделать raycast.

2 - расположение часть экрана:

Input.mousePosition колеблется от 0 (0%) до 1 (100%), так просто проверить позицию мыши внутри метода OnMouseDragUpdate, чтобы убедиться в том, что внутри региона что вы хотите, и если да, то isDrag = false.

+0

Я проверил, есть ли у объекта другой объект под ним, если он затем не упадет на землю. Как перемещение валуна на уступ, пока он находится на выступе, вы можете перетащить его, но как только вы перетащите его за край уступа, он упадет на землю, есть ли у вас кнопка мыши или нет. Я не знаю, как отменить перетаскивание мышью в коде. Я не могу заставить валун отказаться, если не отпустить кнопку мыши. – TazmanNZL

+0

просто сделайте bool 'isDragging' и установите значение true в' OnMouseDown'. Затем, в начале 'OnMouseDragUpdate', выполните возврат' if (! IsDragging); '. Кроме того, при отбрасывании объекта установите значение 'isDragging' в false. – Roberto

+0

Спасибо! Это отлично работает. Как всегда, я могу доверять переполнению стека, чтобы получить ответ. Я задал тот же вопрос на форумах Unity и не получил ответа. – TazmanNZL

Смежные вопросы