- Home /
 
Object drag not moving at the same rate as the pointer
I'm trying to implement a drag and drop system but I'm having a problem with the drag rate at the moment. Currently when I drag an object it only moves a tiny fraction of the amount that my pointer actually moves. How do I fix this?
 using UnityEngine;
 using UnityEngine.UI;
 using System.Collections;
 using UnityEngine.EventSystems;
 using System.Collections.Generic;
 
 public class DragHandling : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler, IPointerClickHandler
 {
     public float partScale;
 
     [HideInInspector] public Transform placeholderParent = null;
     [HideInInspector] public Transform parentToReturnTo = null;
     [HideInInspector] public GameObject trashCan; 
     [HideInInspector] public GameObject partsPanel;
     [HideInInspector] public GameObject partsWindow;
     [HideInInspector] public GameObject buildBoard;
     [HideInInspector] public int orderIndex;
 
     GameObject placeholder = null;
     GameObject dragLayer;
     Vector3 buildPanelScale;
     Vector3 partsPanelScale = new Vector3(1.0f, 1.0f, 1.0f);
     Vector3 startPosition;
 
     private Vector3 offset = Vector3.zero;
 
     void Start ()
     {
         dragLayer = GameObject.FindGameObjectWithTag("DragLayer");
         buildBoard = GameObject.FindGameObjectWithTag("Board");
         partsPanel = GameObject.FindGameObjectWithTag("Parts");
         partsWindow = GameObject.FindGameObjectWithTag("PartsWindow");
         trashCan = GameObject.FindGameObjectWithTag("Trash");
     }
 
     #region IPointerClickHandler implementation
 
     public void OnPointerClick (PointerEventData eventData)
     {
         if(transform.parent.gameObject == buildBoard)
             transform.SetAsLastSibling();
     }
 
     #endregion
 
     #region IBeginDragHandler implementation
 
     public void OnBeginDrag (PointerEventData eventData)
     {
         Vector3 worldPos = Camera.main.ScreenToWorldPoint(eventData.position);
         worldPos.z = transform.position.z;
         offset = worldPos - transform.position;
 
         // startPosition = transform.position;
 
         // create placeholder gap and hold correct position in layout
         orderIndex = transform.GetSiblingIndex();
 
         placeholder = new GameObject();
         placeholder.transform.SetParent(transform.parent);
         placeholder.transform.SetSiblingIndex(transform.GetSiblingIndex());
         parentToReturnTo = transform.parent;                                    // store original parent location
         placeholderParent = parentToReturnTo;                                    // set placeholder gameobject transform
         GetComponent<CanvasGroup>().blocksRaycasts = false;                        // turn off image raycasting when dragging image in order to see what's behind the image            
     }
 
     #endregion
 
     #region IDragHandler implementation
     
     public void OnDrag (PointerEventData eventData)
     {
         Vector3 worldPos = Camera.main.ScreenToWorldPoint(eventData.position);
         worldPos.z = transform.position.z;
         worldPos = worldPos - offset;
         transform.position = worldPos;
 
         // Vector3 mousePosition = new Vector3(eventData.position.x, eventData.position.y, 0);
         // transform.position = Input.mousePosition;                                            // set object coordinates to mouse coordinates
 
         if(transform.parent.gameObject == partsPanel)
             transform.SetParent(dragLayer.transform);                                        // pop object to draglayer to move object out of parts Panel
         if(transform.parent.gameObject == buildBoard)
             transform.SetParent(dragLayer.transform);
     }
     
     #endregion
 
     #region IEndDragHandler implementation
 
     public void OnEndDrag (PointerEventData eventData)
     {
         offset = Vector3.zero;
 
         transform.SetParent(parentToReturnTo);                                    // Snaps object back to orginal parent if dropped outside of a dropzone
         transform.SetSiblingIndex(placeholder.transform.GetSiblingIndex());        // Returns card back to placeholder location
         GetComponent<CanvasGroup>().blocksRaycasts = true;                        // turn Raycast back on
         Destroy(placeholder);                                                    // kill the placeholder if object hits a drop zone or returns to parts panel
 
         if(transform.parent.gameObject == buildBoard)
         {
             buildPanelScale = new Vector3(partScale, partScale, partScale);
             transform.localScale = buildPanelScale;
             transform.SetAsLastSibling();                                        // always place last piece on top
         }
         if(transform.parent.gameObject == partsPanel)
             transform.localScale = partsPanelScale;
             transform.SetSiblingIndex(orderIndex);
     }
 
     #endregion
 
 }
 
              
               Comment
              
 
               
              Answer by t_w · Sep 13, 2015 at 10:16 AM
Maybe you can try change your Projection to Orthographic in your main camera.
Your answer
 
             Follow this Question
Related Questions
Problem with jumping in fps game 1 Answer
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Dragable UI Around the Player Using a Radius 1 Answer
Sluggish relative drag 1 Answer