Cés*_*che 3 c# drag-and-drop unity-game-engine
我有 2 个预制对象,包含在一个带有 UI.Text 的面板中。一个包含用于拖动的类,另一个包含用于放置的类。然而,即使拖动工作正常,OnDrop() 函数也永远不会执行。我还在添加到主 Canvas 的 CanvasGroup 中将 blockRaycasts 设置为 false。
GetComponentInParent<CanvasGroup>().blocksRaycasts = false;
Run Code Online (Sandbox Code Playgroud)
当我将对象拖入其中时,从接口 UnityEngine.EventSystems.IDropHandler 实现的方法 OnDrop() 可能无法触发,是否有任何原因?
public class ItemDropHandler : MonoBehaviour, IDropHandler
{
public void OnDrop(PointerEventData eventData)
{
Debug.Log("Drop detected over the UI.Text"); //this is never shown
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
该问题可能是由于以下事实引起的:您将 CanvasGroup 添加到 MainCanvas,然后将完整 MainCanvas 本身的blocksRaycast 设置为 false。所以基本上你的所有输入都会通过你的画布,没有任何效果。
问题的解决方案:
以下是 DragHandler 的一些示例代码:
public class DragHandler : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
public void OnBeginDrag(PointerEventData eventData)
{
Debug.Log("OnBeginDrag");
GetComponent<CanvasGroup>().blocksRaycasts = false;
}
public void OnDrag(PointerEventData eventData)
{
gameObject.transform.position = Input.mousePosition;
}
public void OnEndDrag(PointerEventData eventData)
{
GetComponent<CanvasGroup>().blocksRaycasts = true;
Debug.Log("OnEndDrag");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6004 次 |
| 最近记录: |