void UpdateDrag ()
{
// Create a plane for the slider
if (mCol == null || UICamera.currentCamera == null || UICamera.currentTouch == null) return;
// Don't consider the slider for click events
UICamera.currentTouch.clickNotification = UICamera.ClickNotification.None;
// Create a ray and a plane
Ray ray = UICamera.currentCamera.ScreenPointToRay(UICamera.currentTouch.pos);
Plane plane = new Plane(mTrans.rotation * Vector3.back, mTrans.position);
// If the ray doesn't hit the plane, do nothing
float dist;
if (!plane.Raycast(ray, out dist)) return;
// Collider's bottom-left corner in local space
Vector3 localOrigin = mTrans.localPosition + mCol.center - mCol.extents;
Vector3 localOffset = mTrans.localPosition - localOrigin;
// Direction to the point on the plane in scaled local space
Vector3 localCursor = mTrans.InverseTransformPoint(ray.GetPoint(dist));
Vector3 dir = localCursor + localOffset;
// Update the slider
Set( (direction == Direction.Horizontal) ? dir.x / mCol.size.x : dir.y / mCol.size.y, false );
}