JPOnion
September 5, 2014, 2:11am
1
I’m trying to build an inventory menu system using a canvas in world space. I’m trying to add drag-and-drop functionality, which requires me to know where the mouse is on the canvas so I know where to draw the item icon.
Does anybody know how to get that value?
JPOnion
September 6, 2014, 1:10am
2
I found the answer. There’s an great set of examples on the new GUI at:
http://forum.unity3d.com/threads/ui-example-project.263418/
One of the examples is on how to setup a drag-and-drop system. The canvas in the example isn’t in world space, but it does work in world space.
Specific to my project, I did the following:
In the class that was going to be dragged, I added:
using UnityEngine.EventSystems;
and inherited the following interfaces:
IBeginDragHandler, IDragHandler, IEndDragHandler
Each interface only has one function:
OnBeginDrag: I created an icon and set its parent to the Canvas.
OnEndDrag: I destroy the icon.
OnDrag: I call this function (this came from one of the examples linked to earlier):
<pre><code>private void SetDraggedPosition(PointerEventData data)
{
if (dragOnSurfaces && 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;
}
}
EDIT: I can’t seem to get the code formatting correct, so replace { and } with the correct brackets…
In the class that will receive the dragged item, I inherited the interface:
IDropHandler
This interface also only has one function:
OnDrop: The variable data.pointerDrag contains the GameObject that was being dragged. You can deal with the dropping logic how you want.
The SetDraggedPosition function from the example was what I was specifically looking for, but I hope the rest of the information is helpful, too.