gpt4 book ai didi

c# - 如何在统一 4.6 中停止 OnBeginDrag() 中的拖动事件

转载 作者:太空狗 更新时间:2023-10-29 17:30:51 25 4
gpt4 key购买 nike

我有一个脚本可以处理将项目从给定槽中拖出和拖入到给定槽中。但我想添加一个功能来停止拖动特定项目。我认为最好的地方是在 OnBeginDrag 方法中,但似乎无法找到停止/取消拖动事件本身的方法,这是我的一些代码

public class SlotBehaviour : MonoBehaviour, IDropHandler, IPointerEnterHandler, IPointerExitHandler, IBeginDragHandler, IDragHandler, IEndDragHandler,IPointerClickHandler
{
public void OnBeginDrag(PointerEventData eventData)
{
if (eventData.button != PointerEventData.InputButton.Left)
{
return;
}
if (this.Empty) return;
var canvas = imageItem.canvas;
if (canvas == null) return;
GUIManager.mouseBusy = true;
// We have clicked something that can be dragged.
// What we want to do is create an icon for this.
m_DraggingIcon = new GameObject("icon");

m_DraggingIcon.transform.SetParent(canvas.transform, false);
m_DraggingIcon.transform.SetAsLastSibling();

var image = m_DraggingIcon.AddComponent<Image>();
// The icon will be under the cursor.
// We want it to be ignored by the event system.
m_DraggingIcon.AddComponent<IgnoreRaycast>();

image.sprite = imageItem.sprite;
image.rectTransform.sizeDelta = imageItem.rectTransform.sizeDelta;


m_DraggingPlane = transform as RectTransform;

SetDraggedPosition(eventData);

}

public void OnDrag(PointerEventData data)
{
if (m_DraggingIcon != null)
SetDraggedPosition(data);
}

private void SetDraggedPosition(PointerEventData data)
{
if (data.pointerEnter != null && data.pointerEnter.transform as RectTransform != null)
m_DraggingPlane = data.pointerEnter.transform as RectTransform;

var rt = m_DraggingIcon.GetComponent<RectTransform>();
Vector3 globalMousePos;
if (RectTransformUtility.ScreenPointToWorldPointInRectangle(m_DraggingPlane, data.position, data.pressEventCamera, out globalMousePos))
{
rt.position = globalMousePos;
rt.rotation = m_DraggingPlane.rotation;
}
}

public void OnEndDrag(PointerEventData eventData)
{
if (m_DraggingIcon != null)
{

Destroy(m_DraggingIcon);
}
GUIManager.mouseBusy = false;
//if you drop it somewhere where its not wanted(or just nowhere)
if (eventData.used == false)
{
if (eventData.pointerCurrentRaycast.gameObject == null)// if its nowhere offer to drop it on ground
{
GUIManager.instance.DropItem((int)ItemsDatabase.container[containerID].items[indexInContainer]);
}
}
}
}

我之前尝试返回该方法,但它没有做任何事情,可能需要对事件数据做一些事情...如果您能告诉我如何处理它,我将不胜感激。

最佳答案

仅仅使用“return”不会取消任何东西。

相反,您可以修改传递给 OnBeginDrag 函数的 PointerEventData 信息 - 具体来说,将 pointerDrag 设置为 null。这将取消拖动:

eventData.pointerDrag = null;

关于c# - 如何在统一 4.6 中停止 OnBeginDrag() 中的拖动事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28202442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com