How to calculate correct screen coordinates for UI elements?


I’m quite new to Unity (but an experiences Java developer) and I’m currently trying to find out how to calculate some coordinates. What I basically want to achieve is very similar to Unitys slider component (Redirect to... title of new-page). My hierarchy looks like something like this:

- Canvas
 - Sliderline (Image)
  - SliderKnob (Image)

In a first step I simple want to be able to move the knob using the mouse along a vertical positioned line (Slideline). In case the user drags the mouse above/below the line, the knob should just stop at the top/bottom.

My problem is that I cannot figure out how to correctly convert Input.mousePosition to calculate the new position of the knob. Here is a snippet of what I’m doing currently:

float yOnLine = Input.mousePosition.y;

if (yOnLine > knobMax) {
  yOnLine = knobMax;
  Debug.Log ("Max position reached");
} else if (yOnLine < knobMin) {
  yOnLine = knobMin;
  Debug.Log ("Min position reached");
} else {
  yOnLine -= knobMin;

where knobMax and knobMin are defined as:

knobMax = sliderline.offsetMin.y + sliderline.rect.height;
knobMin = sliderline.offsetMin.y

If I’m using calculations like above, the knob does move - but really weired ;).

Any tips?

This isn’t specifically about sliders, but will show you a better way of handling the drag events, etc.