Unity gameobject拖拉原始碼

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

[RequireComponent(typeof(Image))]
public class LightingOnList : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
public bool dragOnSurfaces = true;

private GameObject m_DraggingIcon;
private RectTransform m_DraggingPlane;
public GameObject prefab;

public void OnBeginDrag(PointerEventData eventData)
{
    Debug.LogError("OnBeginDrag");
    var canvas = FindInParents(gameObject);
    if (canvas == null)
        return;

    // 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();
    // The icon will be under the cursor.
    // We want it to be ignored by the event system.
    CanvasGroup group = m_DraggingIcon.AddComponent();
    group.blocksRaycasts = false;

    image.sprite = GetComponent().sprite;
    image.SetNativeSize();

    if (dragOnSurfaces)
        m_DraggingPlane = transform as RectTransform;
    else
        m_DraggingPlane = canvas.transform as RectTransform;

    SetDraggedPosition(eventData);
}

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

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

    var rt = m_DraggingIcon.GetComponent();
    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)
{
    Debug.LogError("OnEndDrag - "+ eventData);

    GameObject pointerEnter = eventData.pointerEnter;
    GameObject lastPress = Instantiate(prefab, new Vector3(0, 0, 0), Quaternion.identity);

    lastPress.transform.parent = pointerEnter.transform;
    lastPress.transform.position = eventData.position;
    if (m_DraggingIcon != null)
        Destroy(m_DraggingIcon);
}

static public T FindInParents(GameObject go) where T : Component
{

    if (go == null) return null;
    var comp = go.GetComponent();

    if (comp != null)
        return comp;

    Transform t = go.transform.parent;
    while (t != null && comp == null)
    {
        comp = t.gameObject.GetComponent();
        t = t.parent;
    }

    return comp;
}

}

你可能感兴趣的:(Unity gameobject拖拉原始碼)