2016-07-24 50 views
0

我通過了example關於拖拽&使用UnityEngine.EventSystems拖放項目,它的工作原理。IDragHandler僅適用於畫布和UI項目嗎?

using UnityEngine; 
using System.Collections; 
using UnityEngine.EventSystems; 

public class DragHandler : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler 
{ 
    public static GameObject itemBeingDragged; 
    private Vector3 startPosition; 
    private Transform startParent; 

    public void OnBeginDrag(PointerEventData eventData) 
    { 
     itemBeingDragged = gameObject; 
     startPosition = transform.position; 
     startParent = transform.parent; 
     GetComponent<CanvasGroup>().blocksRaycasts = false; 
    } 

    public void OnDrag(PointerEventData eventData) 
    { 
     transform.position = Input.mousePosition; 
    } 

    public void OnEndDrag(PointerEventData eventData) 
    { 
     itemBeingDragged = null; 
     GetComponent<CanvasGroup>().blocksRaycasts = true; 
     if (transform.parent == startParent) 
      transform.position = startPosition; 
    } 
} 

但是,如果我將腳本組件添加到畫布外的精靈,相同的代碼不起作用。所以我必須使用這段代碼來拖動&下拉精靈。

using UnityEngine; 
using System.Collections; 

public class DragDrop : MonoBehaviour { 

    private Vector3 offset; 

    void OnMouseDown() 
    { 

     offset = gameObject.transform.position - 
      Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 4f)); 
    } 

    void OnMouseDrag() 
    { 
     Vector3 newPosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 4f); 
     transform.position = Camera.main.ScreenToWorldPoint(newPosition) + offset; 
    } 
} 

但是這樣一來,如果一個遊戲對象已經下降到另一個我無法檢測,這可以通過IDropHandler.OnDrop在畫布上完成。

所以在Unity中,我只能在畫布和UI項目上使用IDragHandler和EventSystem嗎?

有沒有其他方法可以在不使用畫布的情況下檢測遊戲對象中丟棄的物品?

回答

2

IDragHandler -> interfaceUnityEngine.EventSystems 器具interfaces: IEventSystemHandler -> base類所有EventSystem事件繼承。

UnityEngine.EventSystems繼承類的:EventSystems.UIBehaviour

所以... IDragHandlerEventSystem工作在畫布上和UI項。

相關問題