2017-07-05 6 views
0

J'essaie de faire glisser des objets dans l'unité, je peux le faire, mais comment puis-je arrêter de déplacer un objet lorsqu'il est frappé à un autre objet dans l'écran. Je ne veux pas que les objets puissent traverser les uns les autres, j'ai utilisé rigidbody2d mais je ne vais pas travailler et pousser et faire tourner l'un l'autre.unity C# comment les objets s'arrêtent lorsque le collisionneur détecte?

Comment puis-je faire cela? Ceci est ma classe:

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 

}

Répondre

0

Je ne veux pas que les objets à passer par les uns des autres

Vous devez ajouter Collider2D aux objets que vous souhaitez collisionneur les uns avec les autres. Si vous l'avez déjà fait, vous devez déplacer un objet Rigidbody avec MovePosition et non transform.position.

Quelque chose comme ci-dessous:

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

pas sur mon ordinateur pour tester cela, mais cela devrait vous aider à démarrer.