2017-07-05 8 views
0

オブジェクトを1つにドラッグしようとしていますが、それを行うことはできますが、画面内の別のオブジェクトにヒットしたときにオブジェクトを移動するのを止める方法はありますか?私はオブジェクトがお互いにできることを望んでいない、私はrigidbody2dを使用していますが、動作し、押して、お互いを回転させません。unity c#衝突検出時にオブジェクトがどのように停止するか?

どうすればいいですか?これは私のクラスである:

using UnityEngine; 
using UnityEngine.EventSystems; 

public class DragAndDrop : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler 
{ 
    public static GameObject DraggedInstance; 

    Vector3 _startPosition; 
    Vector3 _offsetToMouse; 
    float _zDistanceToCamera; 

    #region Interface Implementations 

    public void OnBeginDrag (PointerEventData eventData) 
    { 
    DraggedInstance = gameObject; 
    _startPosition = transform.position; 
    _zDistanceToCamera = Mathf.Abs (_startPosition.z - Camera.main.transform.position.z); 

    _offsetToMouse = _startPosition - Camera.main.ScreenToWorldPoint (
     new Vector3 (Input.mousePosition.x, Input.mousePosition.y, _zDistanceToCamera) 
    ); 
} 

public void OnDrag (PointerEventData eventData) 
{ 
    if(Input.touchCount > 1) 
     return; 

    transform.position = Camera.main.ScreenToWorldPoint (
     new Vector3 (Input.mousePosition.x, Input.mousePosition.y, _zDistanceToCamera) 
     ) + _offsetToMouse; 
} 

public void OnEndDrag (PointerEventData eventData) 
{ 
    DraggedInstance = null; 
    _offsetToMouse = Vector3.zero; 
} 

#endregion 

}

答えて

0

私はあなたがお互いに衝突するオブジェクトにCollider2Dを追加する必要があるオブジェクトがお互い

を通過したくありません。 すでに完了している場合はRigidbodyのオブジェクトをMovePositionでないものをtransform.positionに移動する必要があります。以下のような

何か:私のコンピュータ上の

Rigidbody2D rgbdy2D; 
void Start() 
{ 
    rgbdy2D = GetComponent<Rigidbody2D>(); 
} 


public void OnDrag (PointerEventData eventData) 
{ 
    if(Input.touchCount > 1) 
    return; 

    Vector3 tempPos = Camera.main.ScreenToWorldPoint(
     new Vector3(Input.mousePosition.x, Input.mousePosition.y, _zDistanceToCamera) 
    ) + _offsetToMouse; 

    rgbdy2D.MovePosition(tempPos); 
} 

ないこれをテストするが、この状態で始める必要があります。

関連する問題